猿问

var和let的区别,为什么这两个函数执行的结果不一样呢

vararr=[];
for(**var**i=0;i<10;i++){
arr[i]=function(){
returni;
};
}
for(varj=0;jconsole.log(arr[j]()+"");
}//10个10
var和let的区别在哪呢,为什么声明不一样就会变成不一样的结果呢?还有第一个函数为什么i最后都等于10了?i这里是局部变量还是全局变量呢?局部变量不应该for循环完就自动被GC了吗还是说第一个函数存在闭包所以保留了对i的引用,所以i不会被GC了
vararr=[];
for(**let**i=0;i<10;i++){
arr[i]=function(){
console.log(i);
};
}
for(varj=0;jconsole.log(arr[j]());
}//0-9
吃鸡游戏
浏览 506回答 2
2回答

慕雪6442864

这种问题请去baidu作用域与闭包var变量提升,第一个里循环结束i=10,所以会打印10个10第二个是典型的闭包,每一个闭包引用内部的i变量,所以是0-9

LEATH

var存在变量提升,所以你写的for(vari=0;iLocal作用域所以你在调用arr[i]这个函数时,其实会根据作用域链找到Closure(闭包)中的变量i。使用下面这行代码,打开浏览器中的Source面板并查看右侧的Scope(作用域链)验证。vararr=[]for(leti=0;i
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答