setTimeout: 定時器函數
第一個參數是匿名函數,第二個參數是延遲執行時間
setTimeout(function(){},time)
注意:
1.setTimeout函數是Window對象提供的方法,因此this默認指向window,可以通過bind/call/apply改變this指向
2.setTimeout函數的真正執行時間是在所有可執行的代碼執行完畢后才會執行(函數調用棧清空后)
3.多個setTimeout函數存在的情況下,會按照延遲執行時間的先后執行
setTimeout(function(){console.log('a:'+a)},10); //5 var a=10; console.log('b:'+b); //1 console.log('fn:'+fn); //2 var b=20; function fn(){ setTimeout(function(){console.log('setTimeout 0s')},0) } fn.toString=function(){return 30} console.log('fn2:'+fn) //3 fn(); //4
結合上面注意的點,可知道執行順序為以上標識,具體解釋如下:
1:執行打印b,因為變量的聲明會提前,同時賦默認值為undefined,但執行的時候b還沒有賦值
所以b是undefined
2: 執行打印fn,因為fn的聲明也會提前,因為函數聲明會同時把函數體也帶着(函數表達式就不一定了)
所以fn是setTimeout(function(){console.log('setTimeout 0s')},0)
3: 執行再次打印fn,因為這個時候fn加了一個tostring方法,因此會默認走toString方法
所以此時fn是30
4: 執行fn(),因為延遲時間小於第一個setTimeout
所以此時fn的值為setTimeout 0s
5: 執行打印a,打印為10