问一个闭包的问题

var a = new Array();  
for(var i = 0 ; i < 10 ; i++){
    a[i] = function(){
        return (function(i){
            console.log(i);
            return i;
        })(i);
    };
}  
console.log(a[5]());

想实现a[i]()的每个函数返回对应i的值,但怎么弄都是输出的10,尝试多次还是找不到出错的地方,求解答,谢谢。

DoubleStone
浏览 1323回答 2
2回答

西兰花伟大炮

var a = new Array();       for(var i = 0 ; i < 10 ; i++){             a[i] = (function(){                                  console.log(i);                    return i;                 })(i);             };            console.log(a[5]);

DoubleStone

var a=new Array(); for(var i=0;i<10;i++){     a[i]=function(x){         return function(){             return x;         };     }(i); } console.log(a[5]());自己尝试半天解决了。。JS函数表达式只能强制传参,所以在函数里面再return一个函数接收前面传进去的i值,就能解决了var a=new Array(); for(var i=0;i<10;i++){     a[i]=function(x){         return function(m){             return x+m;         };     }(i); } console.log(a[5](3));//8这样写一下就更简洁能看懂了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript