数组赋值的疑问

如下代码:

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

a[6]();   //结果是10????为什么
阅读 1.9k
3 个回答

如果你把var i = 0 改成 let i = 0,那么结果就是6;

使用var 的话,i在循环里是全局变量,数组里各个函数共用这个变量,这个变量在循环结束后就是10;
使用let的话,i是数组中每个函数的局部变量,也就是i绑定到每个函数了,所以是6;

参考:http://es6.ruanyifeng.com/#do...

日经问题:你在SF直接搜“闭包”吧。

试试

var a = [];
for(var i = 0;i<10;i++){
    a[i] = (function(i){
        return function (){
            console.log(i);
        }
   })(i);
}
a[6]();
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题