为什么这个javascript代码会输出相同的结果?
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
我期待在1,2,3,4中看到。感觉它与词汇范围有关,但背后的真正原因是什么?
有人可以准确解释这段代码是如何在幕后工作的吗?
答案 0 :(得分:-1)
这将产生预期的结果。
var myAlerts = [];
for (var i = 0; i < 5; i++) {
myAlerts.push(alert(i));
}
myAlerts[0](); // 5
myAlerts[1](); // 5
myAlerts[2](); // 5
myAlerts[3](); // 5
myAlerts[4]();
&#13;
通过使用函数inner(),在循环外部调用i时,i被设置为相同的变量
允许您声明范围有限的变量 使用它的块,语句或表达式。这与此不同 var关键字,它全局定义变量,或者本地定义变量 整个功能,无论块范围如何。解释为什么 名字&#34;让&#34;被选中可以找到here。
您还可以使用:
var myAlerts = [];
for (let 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]();
&#13;