zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SysTick—系统定时器
    FreeRtos——单任务
    binutils工具集之---objdump
    对连接器的思考
    数组和指针并不相同
    typedef可以成为你的朋友
    gcc,一个神奇的编译器
    FreeRtos——移植
    Makefile 13——理解make的解析行为
    Makefile 12——改善编译效率
  • 原文地址:https://www.cnblogs.com/artimis/p/9013825.html
Copyright © 2011-2022 走看看