Как реализовать замыкание для этой функции в JavaScript? - PullRequest
1 голос
/ 17 ноября 2010

Прошлой ночью я много гуглил и не мог найти решение своей проблемы: У меня есть цикл 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 Ответ

2 голосов
/ 17 ноября 2010

Это должно выглядеть так:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...