var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); //6
console.log(a[6]); // function(){console.log(i)}
既然循环结束后,数组a的每一项都是function(){console.log(i)}
,那么a[6]()输出是6是怎么实现的?难道let保存了10个状态?
之前搞错了,在外面不能输出i,以下是原来的问题
===============================
var a = [];
for (let i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); //6
console.log(a[6]); // function(){console.log(i)}
console.log(i); //10
a[6] = function(){console.log(i)}
而此时i=10,那么a[6]为啥不是10
let
是块作用域声明,出了for循环就失效了~在匿名函数作用域中
log(i)
引用了上层作用域的变量i
,构成闭包
。a[i]中保存了10个闭包,各自保留了构成闭包时变量
i
的值。2个闭包栗子~