为了账号安全,请及时绑定邮箱和手机立即绑定

问一个闭包的问题

问一个闭包的问题

DoubleStone 2017-04-09 19:05:43
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,尝试多次还是找不到出错的地方,求解答,谢谢。
查看完整描述

2 回答

已采纳
?
西兰花伟大炮

TA贡献376条经验 获得超318个赞

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


查看完整回答
1 反对 回复 2017-04-09
  • DoubleStone
    DoubleStone
    我的想法是这样的,将a[0]、a[1]、a[2]等作为一个不传参的命名函数,返回a的下标值。调用的时候是a[5]()函数。可能我想的有些复杂…
?
DoubleStone

TA贡献1条经验 获得超0个赞

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

这样写一下就更简洁能看懂了。

查看完整回答
反对 回复 2017-04-09
  • 2 回答
  • 0 关注
  • 1322 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信