js 詳解setTimeout定時器


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM