聊聊刚入行也可以理解的JavaScript运行机制

文章介绍了JavaScript的单线程特性以及同步和异步任务的概念,重点讲解了事件循环(EventLoop)的工作原理,包括宏任务和微任务的区别,并通过示例解释了它们在执行顺序中的差异。最后总结了事件循环的过程,强调了异步任务执行的顺序和机制。
摘要由CSDN通过智能技术生成

前言

大家好,我是梁木由,一个有想头的前端。JavaScript知识点真是无穷无尽,今天来理解下JavaScript运行机制。

JavaScript单线程机制

JavaScript是一门单线程语言,就注定它同一时间内就只能做一件事,只能自上而下执行,那么如果上一行解析时间很长,那下面代码就会被阻塞,那对用户而言体验感是非常不友好的。于是JavaScript出现了同步任务异步任务

JavaScript事件循环

同步

程序的执行顺序与任务的排列顺序是一致的、同步的。比如要烧水煮饭,需等水开了,再去煮

异步

在做这件事的同时,你还可以去处理其他事情。比在烧水的同时,可以去切菜

看看同步任务与异步任务的执行过程

image-20230113102810251.png
我们先来看一个问题

setTimeout(() => {
  console.log('setTimeout')
})

new Promise((resolve) => {
  console.log('promise')
  resolve()
}).then(() => {
  console.log('then')
})

console.log('console')

根据上述,那么执行结果应该是

promise
console
setTimeout
then

哎不对呀,与实际输出结果不相符

promise
console
then
setTimeout

宏任务与微任务

我们知道,虽然都是异步任务,但是promisesetTimeout却是不同的异步任务,异步任务有两种

  • 宏任务(scriptsetTimeoutsetIntervalAjax,UI渲染,I/OpostMessage等)
  • 微任务(promiseprocess.nextTick

不同的任务也会进入不同的队列中,所以在执行异步任务时也会进入不同的事件队列

image-20230113105003985.png

这样的话,就理解为什么输出结果是

promise
console
then
setTimeout

事件循环

那给组合一下看看整体的事件循环机制

image-20230113112603431.png

总结

  • 异步任务分类:宏任务,微任务
  • 同步任务和异步任务分别进入不同的执行"场所"
  • 先执行主线程执行栈中的宏任务
  • 执行过程中如果遇到微任务,进入Event Table并注册函数,完成后移入到微任务的任务队列中
  • 宏任务执行完毕后,立即执行当前微任务队列中的所有微任务(依次执行)
  • 主线程会不断获取任务队列中的任务、执行任务、再获取、再执行任务也就是常说的Event Loop(事件循环)。

如果感觉此文稍微有些帮助的话,请不吝点个赞🥺🥺🥺

欢迎大家到大家庭摸鱼交流学习,争当卷王沸点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值