2010-04-24 148 views
0

爲什麼下面的代碼打印「0 5 10 15 20 ... 100」?Javascript關閉問題

(function() { 
for (var i = 100; i >= 0; i -= 5) { 
    (function() { 
     var pos = i; 
     setTimeout(function() { 
      console.log(" pos = " + pos); 
     }, (pos + 1)*10); 
    })(); 
} 
})(); 

我聲明pos = i,它應該按降序排列。此代碼源自John Resig的fadeIn()函數,在他的書「Pro javascript技術」中。

回答

7

你註冊以正確的順序超時,問題是他們在他們的價值秩序計時,因此價值10將在100ms的打印,在1000毫秒值100等

所以你需要更改計時計算以從最大值中減去(在本例中爲100)

(function() { 
for (var i = 100; i >= 0; i -= 5) { 
    (function() { 
     var pos = i; 
     setTimeout(function() { 
      console.log(" pos = " + pos); 
     }, (100 - pos + 1)*10); // note the subtraction here 
    })(); 
} 
})();