js定时器异步问题

https://img2.mukewang.com/5c9360500001fe6703080167.jpg

https://img3.mukewang.com/5c9360510001e2b701010086.jpg

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

当年话下
浏览 1029回答 4
4回答

LEATH

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

MM们

简单粗略易懂的解释一下,一般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 了解一下

慕工程0101907

setTimeout() 和 setInterval() 都有延迟,不存在0秒延时,最小延时4ms。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript