1.let
let arr=[];
for(let i=0;i<2;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0]();// 0
arr[1]();// 1
console.log(i);//i is not defined
此题的关键点在于 每次循环都会产生一个块级作用域,每个块级作用域中的变量都是不同的,
函数执行时输出的是自己上一级(循环产生的块级作用域)作用域下的值;
var
var arr=[];
for(var i=0;i<2;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0]();// 2
arr[1]();// 2
console.log(i);// 2
此题的关键点在于变量i是全局的,函数执行时输出的时全局作用域下的i值;