定时器设置成0秒为什么不是立即执行呢,为什么执行结果是1 3 2呢?是因为定时器是异步的,所以js不会先执行吗?感谢各位大佬解答!
setInterval() 使得匿名函数进入事件队列,会在js引擎“有空”的时候执行,执行间隔每0s一次(相当于只要“有空”就执行)
一开始打印1没问题,然后把打印2的函数添加进事件队列,然后发现还要打印3并没有空,就先去打印3,然后没事干了有空了,就疯狂打印2222222。
event loop 了解一下
这么理解,定时函数事件函数异步回调是在js事件队列里面,也就是说当js主线程空出来的时候才会按照先后顺序去执行这三类函数。你设置0秒,但是定时函数还是在事件队列里面,所以答案是那样的.话说你为啥不setTimeout,看你都输出多少个2了?
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
简单粗略易懂的解释一下,一般for循环 处理dom节点 num++这种运算啊 此类的操作都是同步操作
同步操作有什么特点?就是从上到下依次执行 比如console.log(1) console.log(2) 先显示1后显示
2
请求ajax 给某个按钮添加一个事件比如点击,点击按钮就alert随便一个数字 setTimeout这种被称为异步操作
记住一个结论就好了所有同步代码执行完毕才会执行异步代码
也就是你的定时器不管延迟多少时间,也要等到同步代码都执行完毕之后才会执行