功能总是产生相同的数字

时间:2015-05-23 23:43:46

标签: javascript

我有以下功能,这总是让我产生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

有谁能告诉我如何解决这个范围界定问题?

2 个答案:

答案 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));
}