function test(){
var arr = [];
for(var i = 0;i < 10;i++){
arr[i] = function(){
return i;
};
}
for(var a = 0;a < 10;a++){
console.log(arr[a]());
}
}
test(); // 连续打印 10 个 10
为什么把上面第三行代码的 var i = 0
改为 let i = 0
后,调用 test()
,就会打印 1到9 了呢?
javascript 闭包是如何处理父函数中 let 形成的块级作用域中的变量呢?
当你用var的时候,如下:
--------------------------分界线-------------------------
当你用let的时候,如下:
当你换成let的时候,读取i的时候,在当前作用域(块3)中没有找到,向上一个作用域(块2)寻找,在块2中发现i,于是拿到值。
。
http://stackoverflow.com/ques...
let 关键字可以将变量绑定到所在任意作用域,即let为声明的变量隐式的劫持了所在的块作用域,将变量隐式附加在已经存在的块作用域中