2010-11-17 3 views
1

Прошлой ночью я много искал и не мог найти решение для своей проблемы: У меня есть цикл for с одной функцией в нем, которая получает меня только самое последнее значение из массива.Как реализовать закрытие этой функции в JavaScript?

Итак, вот пример:

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); 

} 
+0

Непонятно (для меня), о чем вы просите? – annakata

+0

@annakata. Поскольку JavaScript не имеет области блока здесь, тот же 'g' повторно используется каждый проход' for', поэтому неверный используется, когда эта асинхронная функция завершается. –

+0

@annakata - thanx, но Ник решил мою проблему! –

ответ

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 для этого.

+0

THANX !! это сделало трюк и очень помогло мне! –

+0

@ Darko - добро пожаловать! –

Смежные вопросы