js中有一个经典的函数赋值错误,这个问题和闭包问题相关,我们先来看一下这个案例吧。
var arr = [];
for(var i=0;i<2;i++){
arr[i] = function(){
return i;
}
}
console.log(arr[0]());
这个结果是2,和你想的一样吗? 可能有不少新手会误以为是1。那么接下来解释一下为什么会是2。 我来写一下流程
var arr = [];
var i = 0;
arr[0]=function(){
return i;
}
i = 1;
arr[1] = function(){
return i;
}
console.log(arr[0]());
看上以上代码,思路清楚没有?这些函数其实并没有执行,直到最后一行才会调用某个函数。之前变量i的值可是一直在变化了,这些i都是全局变量,并不属于某一块。所以会一直变到最后一个值。这时候你再去调用函数取i的值,肯定是最后一个啊。