2015-01-11 3 views
0

Мой код выглядит следующим образом.setTimeout и для

script.js

var main = function(){ 
    for(var j=0; j<10; j++){ 
     for(var i=0; i<10; i++){ 
      setTimeout(function(){$('div').append(i*j);}, 1000*j); 
     }; 
    }; 
}; 
$(document).ready(main); 

index.html

<html> 
    <head> 
    </head> 
    <body> 
    <div></div> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript" src="script.js"></script> 
    </body> 
</html> 

Я хочу, чтобы отобразить

(Sec1) 00000000000

(сек2) 0000000000

(сек3) 0000000000

......

, но отображать

(Sec1) +100100100100100100100100100100

(сек2) 100100100100100100100100100100100100100100100100100100100100

(сек3) 100100100100100100100100100100100100100100100100100100100100100100100100100100100100100 100

......

Почему? Что делать?

ответ

0

Петли for выполняются до завершения планирования 100 setTimeout(). В этот момент, как i и j указывают на конечное значение для for петель которая является то, что они будут в когда setTimeout() обратного вызова вызывается ..

Если вы хотите использовать i и j в setTimeout() обратного вызова, вам нужно будет создать закрытие, чтобы наделить их значение уникальным для каждого цикла через цикл for.

Есть много других ответов, которые иллюстрируют детали того, как это сделать. Вот некоторые из них:

Asynchronous Process inside a javascript for loop

Why is the loop assigning a reference of the last index element to?