var a = [];for (var i = 0; i < 10; i++) {
a[i] = function () { console.log(i);
};
}
a[6](); // 10a[6] //function(){ console.log(i);
}我不理解的是,这里为什么不是a[6] = function () { console.log(6);
};
1 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
因为 i 的作用域 是 window,每循环一次,都会重新赋值。
给你改写一个了一个demo,用外套function锁定作用域,可以实现你要的效果
var a = [];for (var i = 0; i < 10; i++) { a[i] = (function (i) { return function(){ console.log(i); } })(i); }
运行结果:
> a[6];function(){ console.log(i);} >a[6](); 6
添加回答
举报
0/150
提交
取消