定時器真是定時執行的嗎?
定時器並不能保證真正定時執行
- 一般會延遲一丁點(可以接受)
- 也有可能延遲很長時間(不能接受)
那麼什麼情況可以接受,什麼情況下不能接受呢?
document.getElementById('btn').onclick = function () {
var start = Date.now()
console.log('啓動定時器前...')
setTimeout(function () {
console.log('定時器執行了', Date.now()-start)
}, 200)
console.log('啓動定時器後...')
這種情況的出現一定的延遲,而且延遲很低,是可以接受的
document.getElementById('btn').onclick = function () {
var start = Date.now()
console.log('啓動定時器前...')
setTimeout(function () {
console.log('定時器執行了', Date.now()-start)
}, 200)
console.log('啓動定時器後...')
// 做一個長時間的工作
for (var i = 0; i < 1000000000; i++) {
}
我要的是200,你給我800,又不是人民幣,我幹嘛要接受。
- 定時器並不真正完全定時
- 如果在主線程執行了一個長時間的操作, 可能導致延時才處理
定時器回調函數是在分線程執行的嗎?
在主線程執行的, js是單線程的