Javascript将函数推入循环中的数组

Eri*_*ang 2 javascript array-push node.js

    var calls = [];

    for (var y = 1; y <= 10; y++) {
      for (var x = 1; x <= 10; x++) {

        calls.push(function() {
          yooMe(x, y);
        });

      }
    }

    for (var i in calls) {
      calls[i]();
    }

    var yooMe = function(x, y) {
      console.log(x + ':' + y);
    }
Run Code Online (Sandbox Code Playgroud)

我想将一些函数(x,y作为参数)推入带循环的数组中.之后,我将循环数组以调用该函数.但是,结果并不是我的考虑因素.结果是10:10 10:10 ... 10:10.我期待的是1:1 2:1 3:1 ...... 10:10.我认为问题是可变参考问题,但我不知道如何解决这个问题.PS抱歉我的英语不好

jcu*_*bic 7

这是因为你引用了for循环中更改的x和y,所以当你执行函数你有最后一个值时,为了解决这个问题,你需要添加闭包:

for (var y = 1; y <= 10; y++) {
  for (var x = 1; x <= 10; x++) {
    (function(x, y) {
      calls.push(function() {
        yooMe(x, y);
      });
    })(x, y);
  }
}
Run Code Online (Sandbox Code Playgroud)