面试题1:
var arr=[];
for (var i=0;i<2;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0](); //2
arr[1]();//2
在上面的代码中可以看出 arr[0]()
和arr[1]()
可以看成console.log(i);
那么代码就变成了
var arr=[];
for (var i=0;i<2;i++){
arr[i]=function(){
console.log(i);
}
}
// arr[0]();
// arr[1]();
console.log(i);
console.log(i);
那我们看一下另外一个代码;
for (var i=0;i<2;i++){
}
console.log(i);//2
在上面这个代码中,i就在for循环里面有,但是系统会把他看成全局变量,
所以i就是2,上面的面试题的题目也是输出2.
面试题2:
let arr=[];
for (let i=0;i<2;i++){
arr[i]=function(){
console.log(i);
}
}
arr[0](); //0
arr[1]();//1
这个题目是将上面的题目中的var
改成了 let
let 的变量只在所处于的块级区域有用,每一次循环都会产生一个块级作用域,在输出的时候,会向上一级去寻找i
,就可以找到自己循环的时候产生的块级作用域,
输出:0 1