0

Я хочу показать текущее число с JavaScript.Потеря параметров при использовании windows.setTimeout

Для этого я разработал следующий пример:

for(var i=0; i<100; i++) { 
    window.setTimeout(function() { 
    alert(i); 
    },1000*i); 
} 

К сожалению, число 100 показывается каждый раз. Я думаю, это потому, что i является ссылкой?

Как это можно изменить при передаче параметра?

+1

Таким образом, вы нажимаете 100 предупреждающих ящиков каждый раз, когда вы проверяете свой код? – Amberlamps

+0

Возможный дубликат [Закрытие Javascript внутри петель - простой практический пример] (http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example) –

ответ

1

Проблема в том, что JS не ждет и продолжает завершать цикл до истечения таймаутов. К тому времени i уже 100.

Чтобы обойти эту проблему, ваш тайм-аут должен иметь локальную ссылку i. Таким образом, он не ссылается на i, который к тому времени уже 100, но ссылки i в это время цикла.

for(var i=0; i<100; i++) { 
    (function(i){ 
    //shadowing the loop-i with the function-i 
    window.setTimeout(function() { 
     //thus, this callback is referencing the i from the function 
     //and not the loop's i 
     alert(i); 
    },1000*i); 
    }(i)); 
} 
Смежные вопросы