Javascript 我很难理解这段JS代码 var myAlerts=[]; 对于(var i=0;i

Javascript 我很难理解这段JS代码 var myAlerts=[]; 对于(var i=0;i,javascript,function,scope,hoisting,Javascript,Function,Scope,Hoisting,为什么数组中位置0-4处的所有值都是“5”。我发现一些文章认为Javascript支持词法范围而不是动态范围。是的,我知道了。但是,对于上面的代码片段,有没有办法理解这个核心概念呢 谢谢您在这个特定的功能中,i是动态的,每当您更改i的值时,它都将被新值替换 我被认为是有价值的 所以,如果你把它改为for循环,直到10,你将得到所有的i都替换为10 所有函数都引用i,其值在执行时为5。 var myAlerts = []; for (var i = 0; i < 5; i++) {

为什么数组中位置0-4处的所有值都是“5”。我发现一些文章认为Javascript支持词法范围而不是动态范围。是的,我知道了。但是,对于上面的代码片段,有没有办法理解这个核心概念呢
谢谢您

在这个特定的功能中,
i
是动态的,每当您更改i的值时,它都将被新值替换

我被认为是有价值的


所以,如果你把它改为for循环,直到10,你将得到所有的i都替换为10

所有函数都引用
i
,其值在执行时为
5
var myAlerts = [];    

for (var i = 0; i < 5; i++) {    
    myAlerts.push(    
        function inner() {    
            alert(i);    
        }    
    );    
}    

myAlerts[0](); // 5    
myAlerts[1](); // 5    
myAlerts[2](); // 5   
myAlerts[3](); // 5   
myAlerts[4](); // 5