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