• 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

  • 相关阅读:
    一些动规题
    洛谷P1717 钓鱼
    一堆递推题
    义冢oj P5033打气球
    义冢oj P5032生理周期
    Proud Merchants HDU
    739B
    Lost Cows POJ
    并查集负值根表集合大小的写法
    [Poi2011]Tree Rotations线段树合并
  • 原文地址:https://www.cnblogs.com/artimis/p/9013825.html
Copyright © 2020-2023  润新知