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

js闭包作用域

js闭包作用域

阿晨1998 2018-11-20 13:10:15
为什么会输出10 次10 push进去的不应该是 1 - 9吗 这个坑求大神解答function save_i(){    var a = [];    for(var i = 0;i<10;i++){        a[i] = function(){            return i;        }    }    return a;   }var c = save_i();for(var i = 0;i<10;i++){   console.log(c[i]());    //10次 10}
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

只需要在for循环执行时,创建一个闭包函数将i值保存起来,既可以依次输出

function save_i(){

    var a = [];

    for(var i = 0;i<10;i++){

        a[i] = function(i){

            return function() {

                return i;

            };

        }(i);

    }

    return a;

}


var c = save_i();

for(var i = 0;i<10;i++){

   console.log(c[i]());

    //已经变为依次输出

}


查看完整回答
反对 回复 2018-12-27
  • 1 回答
  • 0 关注
  • 520 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号