如何在JavaScript中实现此函数的闭包?

时间:2010-11-17 10:04:35

标签: javascript closures

昨晚,我搜索了很多,无法找到问题的解决方案: 我有一个for循环,其中包含一个函数,它只获取数组中的最新值。

所以,这是一个例子:

obj1.route = new Routeng();
obj2.route = new Routeng();

for(var x in arrObjs) { //arrObjs = array of objects
  var g = arrObjs[x];

  // I can access properties of all "g" objects

  Routelousse.gen(function(res) {
    var pathern = res.pathern;
    g.routel.staviPather(pathern);

    MYOBJ.vehicles.push(g);
    alert(g.name); // during the loop I always get the LAST "g" object from "arrObjs"
  }, g.point);

}

1 个答案:

答案 0 :(得分:2)

它应该是这样的:

obj1.route = new Routeng();
obj2.route = new Routeng();

for(var x=0; x<arrObjs.length; x++) {
  var g = arrObjs[x];

  (function(ig) {
    Routelousse.gen(function(res) {
      var pathern = res.pathern;
      ig.routel.staviPather(pathern);

      MYOBJ.vehicles.push(ig);
      alert(ig.name);
    }, ig.point);
  })(g);
}

在此我们将当前g作为一个不同的变量传递给该自执行函数,而不是在您当前所在的函数中共享的g(这不是'阻止范围)并且正在改变for循环的每次传递。

还要注意for循环更改...你永远不应该使用for...in循环来迭代一个数组,使用正常的for循环