当一个花括号内声明用let,此时后花括号内的所有指向(用let声明的变量)的变量的作用域都被局限到了这或括号内;
例如:
for(let i = 0;i<10; ++i){
function test(){
console.log(i);
}
}
test();//结果为9,因为test是全局函数,但是i生成了块级作用域,每次生成test函数都会覆盖前一个test函数最后test的i就是最后的i了
var arr = [];
for(let i = 0;i<10; ++i){
arr[i] = function(){
console.log(i);
}
}
arr[5]();//结果是5,因为当为每一个arr[]的元素创建函数时,此时函数的作用域是i创建的这个块级作用域中,当调用arr[5]();他会找创建这个函数时的i,所以就是5;
最后找到的一个文章:https://blog.csdn.net/wlk2064819994/article/details/79772388