js定时器异步问题

图片描述

图片描述

定时器设置成0秒为什么不是立即执行呢,为什么执行结果是1 3 2呢?是因为定时器是异步的,所以js不会先执行吗?感谢各位大佬解答!

阅读 5.7k
5 个回答

简单粗略易懂的解释一下,一般for循环 处理dom节点 num++这种运算啊 此类的操作都是同步操作
同步操作有什么特点?就是从上到下依次执行 比如console.log(1) console.log(2) 先显示1后显示
2

请求ajax 给某个按钮添加一个事件比如点击,点击按钮就alert随便一个数字 setTimeout这种被称为异步操作
记住一个结论就好了所有同步代码执行完毕才会执行异步代码
也就是你的定时器不管延迟多少时间,也要等到同步代码都执行完毕之后才会执行

console.log(1);

btn.onclick = function() {
    console.log('click me')
}

console.log(4);

setTimeout(function() {
  console.log(3)
},0)

setInterval() 使得匿名函数进入事件队列,会在js引擎“有空”的时候执行,执行间隔每0s一次(相当于只要“有空”就执行)
一开始打印1没问题,然后把打印2的函数添加进事件队列,然后发现还要打印3并没有空,就先去打印3,然后没事干了有空了,就疯狂打印2222222。

event loop 了解一下

setTimeout() 和 setInterval() 都有延迟,不存在0秒延时,最小延时4ms。

event loop了解一下?

这么理解,定时函数事件函数异步回调是在js事件队列里面,也就是说当js主线程空出来的时候才会按照先后顺序去执行这三类函数。你设置0秒,但是定时函数还是在事件队列里面,所以答案是那样的.话说你为啥不setTimeout,看你都输出多少个2了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题