2017-01-24 5 views
-2
for(i=0;i<10;i++){ 
    setTimeout(function(){ 
     document.write(i); 
    },(i*1000)); 
} 

Это мой код, он работает, за исключением счетной части. Каждую секунду он пишет 10. Может ли кто-нибудь сказать мне, почему?Почему часы подсчета не работают?

+1

Поиск по ** затворам ** –

+1

А также петли событий – WitVault

ответ

2

Это issue. Когда вы выполняете итерацию, как это значение i, перед выполнением функции таймаута вам нужно скопировать значение i для каждого исполнения.

Самое простое решение передать его в отдельный метод, например, так:

for(i=0;i<10;i++){ 
    addToDocument(i); 
} 

function addToDocument(i){ 
setTimeout(function(){ 
     document.write(i); 
    },(i*1000)); 
} 

Проблема с JavaScript, в отличие от Java является то, что он не относится к i как окончательное внутри clusure, поэтому вам нужно чтобы скопировать его значение.

+0

Надеюсь, что это решит ваше дело, если да, пожалуйста, закройте вопрос :) – Beri

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