请教一个关于执行顺序的问题

2018 年 4 月 25 日
 denano
new Promise(function(resolve) {
  resolve(console.log(1))
}).then(function() {
  console.log(2)
})
console.log(3)
setTimeout(function() {
  console.log(4)
}, 0)

想请教下 2 为什么一定会比 4 先输出,自己缺失了哪方面的知识。。

4620 次点击
所在节点    JavaScript
9 条回复
afpro
2018 年 4 月 25 日
你在最后一行加一个 console.log(5) 再看一下结果应该就想明白了
afpro
2018 年 4 月 25 日
顺带科普一个常识 现有的 javascript 解释器都是单线程的
momocraft
2018 年 4 月 25 日
eventloop / task queue

理论上这是给浏览器用的标准 ( HTML5 ),实际上大家都和浏览器做得差不多。
zhengxiaowai
2018 年 4 月 25 日
denano
2018 年 4 月 25 日
@momocraft
@zhengxiaowai
谢谢,明白了
autoxbc
2018 年 4 月 25 日
Promise 的构造函数是同步代码,then 方法的回调函数是异步代码,异步代码按照抛出他们的同步代码的顺序加入队列

同步异步单线程这些是 js 基础,高级程序设计里有; Promise 原理可以看 Promise 小书,不过小书对两者的返回值讲的不清楚,还要看一下 MDN; 最后可以看 Promise 规范,有完整中文版
sujin190
2018 年 4 月 25 日
而且 setTimeout 实际是有最小延时时间的,并不能是 0,好像是 4ms 吧
chairuosen
2018 年 4 月 25 日
kisnows
2018 年 4 月 25 日
看一下 event loop 方面的知识就清楚了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/449637

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX