function createFunctions(){
var result = new Array();
for(var i = 0; i < 10; i++){
result[i] = function(num) {
return function() {
return num;
};
}(i);   //这里是什么意思?
}
return result; // result是一个函数数组
}
var funcs = createFunctions();  // 得到一个函数数组funcs
for(var i = 0; i < funcs.length; i++){
document.write(funcs[i]()+"<br/>");
}
问题如注释,那里多出来一个(i)是什么意思啊,不懂

解决方案 »

  1.   

    闭包的用法    
    function createFunctions(){
            var result = new Array();
            for(var i = 0; i < 10; i++){
                result[i] = function(num) {//这里的num就是后面(i)中的值,下面三行就是这个闭包函数的返回值;看这代码就是创建了一个数组,result[0]=0;result[1]=1。
                    return function() {
                        return num;
                    };
                }(i);   //这里是什么意思?:闭包函数的用法,这里的i就是for中的i,将其传递给result[i]=function(num)的这个num
            }
            return result; // result是一个函数数组
        }
      

  2.   

    这个例子主要是因为result[i]返回的是一个function
    否则,根本不需要使用闭包
      

  3.   


    嗯嗯,是闭包,学到这里,看不懂. 只是觉得function(num){...}这已经是一个完善的函数了,怎么后面会再多了个(i)呢...  请问是只有闭包才有这种用法对吗?
      

  4.   

    对匿名函数function(num) {
                    return function() {
                        return num;
                    };
                }的调用,i是传送的参数,是实参,而function(num)中的num是形参,也就是把i付给num
      

  5.   

    是的,这个我倒是知道,因为i默认会属于cerateFunctions()作用域.
      

  6.   

    不闭包也可以,如(function(num){
        ...
    })(i);
      

  7.   

    不闭包也可以,如(function(num) {
        ...
    })(i);
      

  8.   

                function(num) {
                    return function() {
                        return num;
                    };
                }
         i是上面循环中的i这是个匿名函数后面加(i)是直接调用这个函数,把i传入进函数里num=i这时候