請看下面的兩個例子。在這兩個示例中,變量i
都被指定爲0到9.在第一個示例中,在調用超時函數時,i
已被賦值爲9.我不知道在超時時間爲i
的值組。Javascript - 幫助理解變量行爲
for(var i = 0; i < 10; i++) {
var callback = function() {
alert('The first test returns: ' + i);
};
if(i === 0) setTimeout(callback, 2000);
}
在第二選項中,我們可以通過它傳遞到一個新的環境繼續存在的i
值(請糾正我,如果這個術語是不正確的)。
for(var i = 0; i < 10; i++) {
var callback = (function(i) {
return function() {
alert('The second test returns: ' + i);
}
})(i);
if(i === 0) setTimeout(callback, 2000);
}
第二個例子給我我所期望的價值,0
- 所以儘可能的垃圾收集去如何工作的呢? GC在什麼時候刪除該值?在回調函數的末尾?或者會有某種內存泄漏?
這不是這個問題的目的,我只是爲解釋目的創建一個異步機制。 – lwansbrough
我認爲setInterval是更好的方法來處理事情..將你的代碼減少到一半 –
你完全錯過了這一點。 – lwansbrough