日期:2014-05-16  浏览次数:20464 次

javascript高级程序设计中的一个函数问题
JScript code

    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)是什么意思啊,不懂

------解决方案--------------------
闭包的用法

JScript code
    
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是一个函数数组
    }

------解决方案--------------------
不闭包也可以,如(function(num) {
...
})(i);
------解决方案--------------------
function(num) {
return function() {
return num;
};
}
i是上面循环中的i这是个匿名函数后面加(i)是直接调用这个函数,把i传入进函数里num=i这时候