2012-06-19 3 views
0

Можно создать дубликат:
Javascript: closure of loop?Javascript переменные унаследованы функции

Псевдо JavaScript:

for (i, i<10, i++) { 
    new element.addEvent('click', function(){ alert(i) }).inject(dom) 
} 

Когда цикл заканчивается все OnClick события будут выдавать предупреждения с ' конечное "значение i. Каков «правильный» способ заставить их оповестить значение i, как это было, когда было добавлено событие onclick?

Когда я говорю правильно, я имею в виду, что я знаю, что существует несколько способов достижения такого поведения, но я хочу знать стандарт (т.е. ожидаемый людьми, которые могут столкнуться с кодом). Благодарю.

+7

кандидат на наиболее часто задаваемый вопрос ... – Thilo

+0

@Thilo затем закрыть голосование :-) –

+0

@FlorianMargaine Есть еще 4 закрытия голосов , –

ответ

3

Используйте замыкание, чтобы захватить значение i на каждой итерации:

for (i; i<10; i++) { 
    (function(i) { 
     new element.addEvent('click', function(){ alert(i) }).inject(dom); 
    }(i)); 
} 
+3

Почему downvote? Хотя он недействителен JavaScript, он отвечает на вопрос тем же псевдокодом, каким использовал OP. – ThiefMaster

+1

Я проигнорировал, потому что он мог закрыться, чтобы голосовать вместо того, чтобы отвечать на это. Избегайте загрязнения СО и т. Д. –

+0

@FlorianMargaine - Посмотрите на список людей, которые закрылись. Я являюсь одним из них. Хотя это дубликат, я чувствую, что он может быть полезен новому пользователю SO, чтобы получить прямой ответ. –

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