定義很簡單
setTimeout() 方法用于在指定的毫秒數后調用函數或計算表達式。
 
廣泛應用場景
定時器,輪播圖,動畫效果,自動滾動等等
 
setInterval()和setTimeout()返回值
setInterval(),setTimeout() 會返回一個值,一般認為是ID,將這個ID值傳遞給clearInterval(),clearTimeout() 可以取消執行,例如:
 
var intervalTimer=setInterval(function(){
    console.log(1)
},3000);
console.log(intervalTimer); //一般是一個數字,Number
button.onclick=function(){
    clearInterval(intervalTimer);
};
 
setInterval()和setTimeout()中回調函數中的this
setInterval(),setTimeout() 方法是瀏覽器 window 對象提供,所以第一個參數函數中的this指向window對象,這跟變量的作用域有關:
 
var a=1;
var obj={
    a:2,
    b:function(){
        setTimeout(function(){
            console.log(this.a);//這里返回的是:1;
        },2000);
        
    }
};
obj.b();
 
當然你可以通過使用bind()方法來改變這個情況:
 
var a=1;
var obj={
    a:2,
    b:function(){
        setTimeout(function(){
            console.log(this.a);//這里返回的是:2;
        }.bind(this),2000);//注意這行
 
    }
};
obj.b();
 
setInterval()和setTimeout()的參數
 
大家都知道setInterval()和setTimeout()可以接收兩個參數,第一個參數是需要回調的函數,必須傳入的參數,第二個參數是時間間隔,毫秒數,可以省略,這個可以看文章的下面,
 
不傳第二個參數,瀏覽器自動配置時間,在IE,FireFox中,第一次配可能給個很大的數字,100ms上下,往后會縮小到最小時間間隔,Safari,chrome,opera則多為10ms上下。
 
但是我要說的當然不是這個,我要說的是setInterval()和setTimeout()可以接收更多的參數,那么這些參數是干什么用的呢?從第三個參數開始,依次用來表示第一個參數(回調函數)傳入的參數,例如
 
setTimeout(function(a,b){
   console.log(1+a+b);//這里打印的是:8
},1000,3,4);
 
 
當然一些古老的瀏覽器是不支持的。
 
關于clearInterval()和clearTimeout()
clearInterval()和clearTimeout()其實是通用的,就是說你可以用 clearInterval() 取消 setTimeout() 執行,clearTimeout()同樣可以取消 setInterval() 執行。
 
var intervalTimer=setInterval(function(){
    console.log(1)
},3000);
console.log(intervalTimer); 
button.onclick=function(){
    clearTimeout(intervalTimer); //注意這里,不是clearInterval哦
};