for(var i = 0;i//lg = 6
settimeout(function
(),1000)
}
我們想要的結果是在for迴圈中一次列印出i
的 值。即0,1,2,3,4,5;但是輸出6個相同的個數字是什麼原因呢?那我們應該怎麼解決這個問題呢?
解決這個問題首先是要解決 i 值的變數銷毀問題,即瀏覽器的垃圾**機制:
第一種方法:將延時器中的函式用乙個自執行函式包起來,把每個迴圈中的 i 在被**之前直接傳入到自執行函式中,這樣就可以避免被**:如下:
for (var i = 0; i < lg; i++) )(i), 1000);//將 i 作為變數傳入
}
但是這樣寫會出現乙個問題,函式直接列印了,並沒有一秒的延遲,原因是將自執行函式放在定時器中,會直接執行,並不是1秒後再執行,所以在這種方法上做了一些改進,即第二種方法:
第二種方法:將延時器整個的包裹在乙個子執行函式中,這樣就相當於同時定義了6個延時1s的延時器:
for (var i = 0; i < lg; i++) , 1000)})(i)
}
這樣就完美的解決問題了;如果你想要每隔一秒輸出乙個值,而不是同時輸出,則可以將引數傳進時間中:
for (var i = 0; i < lg; i++) , a*1000)//將 i 的值傳進來 ,這樣就可以每個一秒輸出乙個值
})(i)
}
setinterval定時器和settimeout 不同,因為是執行次數的原因,不能將 i 的值傳進時間中,會造成多次重複;
js中定時器與延時器的用法
新增定時器 刪除定時器 此處的timer 自定義 是定時器的順序,在後面的部分我會介紹到 然後我們介紹一下它們的具體用法 settimeout 只能執行一次,請看下面的 執行的效果如下面所示 只能生成乙個小盒子 setinterval中這個函式可以無限迴圈執行,將上面的倒數第二行 替換成如下 則效果...
js用延時器優化input實時檢測,及中文輸入優化
propertychange 功能同oninput,用以替代oninput在ie9以下的不相容性。oninput 和 onchange oninput和onchange都是事件物件,當輸入框的值發生改變時觸發該事件。不同的是,oninput是在值改變時立即觸發,而onchange是在值改變後失去焦點...
定時器和延時器(利用定時器製作倒計時)
一 延時器 settimeout 1.延時器 settimeout 的工作方式是 當設定乙個延時器是5s後進行時,並不代表它5s後就立即執行,只是代表它5s後會被加入佇列,如果5s後,佇列沒有其他東西,那麼延時器的 會立即執行,否則會延遲執行。因此,關於延時器最重要的一點是 指定的時間間隔 如設定5...