这段代码的执行顺序,根据执行顺序分析、JS事件轮询原理
console.log('script start'); // 1
setTimeout(function () {
console.log('settimeout') // 6
});
let promise1 = new Promise(function (resolve) {
console.log('promise1') // 2
resolve()
console.log('promise1 end') // 3
}).then(function () {
console.log('promise2') // 5
});
console.log('script end'); // 4
执行逻辑
- 从代码执行角度来看 首先分析同步代码、在面的代码中异步代码只有promise.then回调与settimeout回调,所以他们肯定是最后执行的、其他同步代码按照书写顺序自上向下执行
- promise.then回调虽然是异步执行,但是resolve()触发后实际上回调函数被加入到了js同步函数队列末尾,在轮询过程中仍然会作为同步代码优先执行
- settimeout定时器在js中是由一个单独模块管理、其回调函数也是由一个单独队列管理,在js同步队列执行完毕,才会执行定时器队列代码
结论
- 在js中代码的执行实际上是由两个队列来组织代码执行时序的(主线程队列、定时器队列),优先轮询主线程队列、主线程队列空闲轮询定时器队列。
- 实际上我们全局代码也在一个全局函数中,此函数在js解释器开始工作时,总是排在主线程队列头部。
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。