var a = [];
for (var i = 0; i < 10; i++) {
a[i] = function () {
console.log(i);
};
}
a[6](); // 10
变量泄露导致上面的a[6]变成10;
我不太理解 这里为什么a[6]是10,我的错误思维如下
- a[6] 这里没有变量, 所以内存泄露源于循环
- 循环中,每次都是把当前次数赋值给对应的数组,
a[0] = function () { console.log(0);};
a[1] = function () { console.log(1);};
......
a[9] = function () { console.log(9);};
再每一次赋值的时候i的值是正确的,赋值后,每个函数都是固定输出一个数字,也不存在变量
3.请问 我的思维错在哪里了
这个题已经问烂了也回答不知道多少遍了
i是全局变量 函数调用的时候获取i 此时 i已经循环到了10
下面是个简单了例子可以理解为经历了两次循环
解决方法 将i变为局部变量