var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
a[6] //
function(){
console.log(i);
}
我不理解的是,這里為什么不是
a[6] = function () {
console.log(6);
};
因?yàn)?i 的作用域 是 window,每循環(huán)一次,都會(huì)重新賦值。 給你改寫一個(gè)了一個(gè)demo,用外套function鎖定作用域,可以實(shí)現(xiàn)你要的效果
var a = [];
for (var i = 0; i < 10; i++) {
a[i] = (function (i) {
return function(){
console.log(i);
}
})(i);
}
運(yùn)行結(jié)果:
> a[6];
function(){
console.log(i);
}
>a[6]();
6