我有以下功能,这总是让我产生5.我看到函数inner正在global context
中执行,所以结果总是为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
有谁能告诉我如何解决这个范围界定问题?
答案 0 :(得分:3)
尝试闭包:
for (var i = 0; i < 5; i++) {
(function(i){
myAlerts.push(
function inner() {
alert(i);
}
);
})(i);
}
答案 1 :(得分:1)
将函数包装在闭包中起作用:
var myAlerts = [];
for (var i = 0; i < 5; i++) {
myAlerts.push((function(i) {
return function inner() {
alert(i);
}
})(i));
}