理解JS执行顺序

发布时间:2019-08-10 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了理解JS执行顺序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

前言


众所周知,JS的执行顺序是自上而下的。
严格意义上来说,javascript没有多线程的概念,所有的程序都是单线程依次执行的。
就是代码在执行过程中,另一段代码想要执行就必须等当前代码执行完成后才可以进行。

注意

js代码执行分为两个部分:
1、代码的检查装载阶段(预编译阶段),此阶段进行变量和函数的声明,但是不对变量进行赋值,
   变量的默认值为undefined2、代码的执行阶段,此阶段对变量进行赋值和函数的声明。
所以:Js的变量提升和函数提升会影响JS的执行结果,ES6中的let定义的变量不会提升 
3、js的执行顺序,先同步后异步
4、异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列
5、调用Promise 中的resolve,reject属于微任务队列,setTimeout属于宏任务队列
所以:【同步>异步;微任务>宏任务】

示例

console.LOG('event start')
setTimeout(function () {
    console.log('setTimeout');
});

new PRomise(function(resolve,reject){
    console.log('promise start')
    resolve()
}).then(function(){
    console.log('promise end')
})
console.log('event end')

执行结果为:

event start
promise start
event end
promise end
undefined
setTimeout

解释:

主线程执行按顺序代码
遇到 setTimeout, 回调进入到宏任务队列上
遇到 Promise, 立即执行, then 函数进入到微任务队列
同步代码执行结束, 主线程检查是否存在微任务, 发现 then, 执行
微任务执行完毕, 再去查找宏任务 setTimeout, 执行
setTimeout 执行结束, 检查是否存在微任务, 不存在, 结束.

图例

理解JS执行顺序

理解JS执行顺序

脚本宝典总结

以上是脚本宝典为你收集整理的理解JS执行顺序全部内容,希望文章能够帮你解决理解JS执行顺序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。