猿问

js中非常简单的变量泄露问题

vara=[];
for(vari=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.请问我的思维错在哪里了
蝴蝶刀刀
浏览 842回答 2
2回答

当年话下

问题源于对函数作用域(链)的理解不够深,一下是个人的一点见解,望能帮助到您:vara=[];for(vari=0;i

至尊宝的传说

这个题已经问烂了也回答不知道多少遍了i是全局变量函数调用的时候获取i此时i已经循环到了10下面是个简单了例子可以理解为经历了两次循环vari=1;functiona1(){console.log(i)}vari=2;functiona2(){console.log(i)}a1();//2a2();//2解决方法将i变为局部变量es6{leti=1;functiona1(){console.log(i)}}{leti=2;functiona2(){console.log(i)}}a1();//1a2();//2//es6let局部变量for(leti=0;i
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答