首先,还是看到一道面试题

for ( var i = 0 ; i < 10 ; ++i ) {
      setTimeout(function(){
          console.log(i);
      },0)
}  

输出结果比较诡异。为10个10.

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
for ( var i = 0 ; i < 10 ; ++i ) {
      setTimeout(function(){
          console.log(i);
      },0)
}  

//相当于
++i(0)
setTimeout()
++i(1)
setTimeout()
++i(2)
setTimeout()
.
.
.
++i(9)
setTimeout()

//然而真正执行的顺序是
++i(0)
++i(1)
++i(2)
.
.
.
++i(9)
setTimeout(i) //第一次
setTimeout(i) //第二次
.
.
.
setTimeout(i) //第十次
  • 上述涉及到一个非常重要的知识点,就是setTimeout(function,xx)的第二个参数xx。这个函数到底什么时候执行呢?
  • 正常情况是调用setTimeout(function,xx)。js会启用定时器timer,大约xxms后执行。
  • 其实执行时间是在浏览器不忙的时候执行。
  • 比如你设置的xx为5ms。前面队列需要10ms,那么函数会在10ms后执行。

    如果你设置的xx为20ms,就会在20ms后执行(20ms > 10ms)【此条等待实际例子验证】
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄