定時器setTime和setInterval

setTimeout()

用法

參數:ajax

setTimeout(fn,100,1,2)。第一個和第二是參數固定的,第一個是回調函數,第二個是延遲時間,後面的都是回調函數的參數。

返回值:函數

setTimeout返回值是一個id,表示setTimeout的id,便於使用clearTimeout清除。

使用setTimeout能將裏面的函數加入到任務隊列中去。this

console.log(1);
setTimeout('console.log(2)',1000);
console.log(3);
上面代碼執行到setTimeout時,定時線程會將裏面的代碼放在定時任務隊列裏面。而後1s後輸出2。假如setTimeout('console.log(2)',1000);後面有代碼報錯,setTimeout也就不會執行了。

注意點

setTimeout回調函數裏面的this關鍵字指向全局環境。線程

let x=1;
let obj={
    x:2,
    y:function(){
        console.log(this.x)
    }
}
setTimeout(obj.y(),1000)//此時輸入的是1。

解決辦法就是在套一層函數隔開。

let x=1;
let obj={
    x:2,
    y:function(){
        console.log(this.x)
    }
}
setTimeout(function(){obj.y()},1000)//此時輸入的是2。

setInterval()

用法,參數,this指向都和setTimeout相同,不一樣的只是setInterval會定時循環執行。除非關閉當前窗口。

setInterval是指一次函數執行,到下次函數執行時的時間間隔;不包括函數自己的執行時間。因此假如函數自己執行時間爲105ms大於指定時間間隔100ms,那麼下次函數是在105ms後執行。這樣會形成時間間隔不固定(例如ajax形成的)。解決方案使用setTimeout代替。本身調用本身

var i = 1;
var timer = setTimeout(function f() {
  // ...
  timer = setTimeout(f, 2000);
}, 2000);

防抖動函數debounce

相關文章
相關標籤/搜索