为了账号安全,请及时绑定邮箱和手机立即绑定

js定时器异步问题

js定时器异步问题

当年话下 2019-03-05 13:18:07
定时器设置成0秒为什么不是立即执行呢,为什么执行结果是1 3 2呢?是因为定时器是异步的,所以js不会先执行吗?感谢各位大佬解答!
查看完整描述

4 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

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


查看完整回答
1 反对 回复 2019-03-21
?
MM们

TA贡献1886条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-03-21
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

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

event loop 了解一下


查看完整回答
反对 回复 2019-03-21
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

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


查看完整回答
反对 回复 2019-03-21
  • 4 回答
  • 0 关注
  • 1028 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信