Проблема с общими данными - PullRequest
0 голосов
/ 23 июня 2011

У меня есть такой код:

var increment = 200;

for (var j=0; j<10; j++){

  var print = function(){ console.log("===== J ===== "+j); }

  setTimeout(print, increment); 

  increment+= 200;

}  

Консоль всегда печатает 10. Я думаю, что это может быть для оператора и setTimeout выполняются в разных потоках. Как я могу сделать, чтобы напечатать правильное значение J?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 23 июня 2011

Думаю, у вас проблема с объемом.Вы в основном переписываете функцию печати 10 раз, и потому что вы ожидаете вызова функции с setTimeout к тому моменту, когда она вызывается, функция на самом деле

var print = function(){ console.log("===== J ===== "+10); }
1 голос
/ 23 июня 2011

Это стандартная проблема связывания, вы можете найти множество похожих вопросов на stackoverflow.

По сути, он использует один 'j' для всех значений. Попробуйте вместо этого:

function getBoundLog(j)
{
   return function(){console.log("===== J ===== "+j);}
}
var increment = 200;

for (var j=0; j<10; j++){

  setTimeout(getBoundLog(j), increment); 

  increment+= 200;

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