资讯专栏INFORMATION COLUMN

js执行机制

daydream / 1352人阅读

摘要:一旦异步任务指定的事情完成过后,其对应的回调函数移入。事件完成,回调函数进入。主线程为空过后,主线程从读取回调函数并执行这张图告诉我们我们对任务有更精细的定义宏任务包括整体代码,,微任务,不同类型的任务会进入对应的,比如和会进入相同的。

javascript是单线程语言,所以javascript是按照语句出现的顺序执行的。既然javascript是单线程语言,那么js任务也要一个一个顺序执行。如果一个任务耗时过长,那么后一个任务也必须等着。这样不利于开发,所以需要将任务分为两类:1、同步任务;2、异步任务;


这张图片告诉我们:
1、分清楚什么是同步任务、哪个是异步任务,同步任务和异步任务进入不同的场所,同步任务进入主流程栈中,异步的进入Event Table并注册函数。
2、一旦异步任务指定的事情完成过后,其对应的回调函数移入Event Queue。
3、主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,进入主线程执行
4、上述过程会不断重复,也就是常说的Event Loop(事件循环)(事件循环根据判断宏任务是否执行结束)
例子1:
let data = [];
$.ajax({

url:www.javascript.com,
data:data,
success:() => {
    console.log("发送成功!");
}

})
console.log("代码执行结束");
分析:
1、ajax进入Event Table,注册回调函数success
2、ajax是异步任务,同步任务console.log("代码执行结束")会挂到主线程上执行。
3、ajax事件完成,回调函数success进入Event Queue。
4、主线程为空过后,主线程从Event Queue读取回调函数success并执行


这张图告诉我们:
1、我们对任务有更精细的定义:
macro-task(宏任务):包括整体代码script,setTimeout,setInterval
micro-task(微任务):Promise,process.nextTick
不同类型的任务会进入对应的Event Queue,比如setTimeout和setInterval会进入相同的Event Queue。
2、进入整体代码(宏任务)(同步任务)后,开始第一次循环。接着执行所有的微任务。然后再次从宏任务开始,找到其中一个任务队列执行完毕,再执行所有的微任务
作者:ssssyoki
链接:https://juejin.im/post/59e85e...
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108206.html

相关文章

  • 10分钟理解JS引擎的执行机制

    摘要:深入理解引擎的执行机制灵魂三问为什么是单线程的为什么需要异步单线程又是如何实现异步的呢中的中的说说首先请牢记点是单线程语言的是的执行机制。 深入理解JS引擎的执行机制 1.灵魂三问 : JS为什么是单线程的? 为什么需要异步? 单线程又是如何实现异步的呢? 2.JS中的event loop(1) 3.JS中的event loop(2) 4.说说setTimeout 首先,请牢记2...

    zzbo 评论0 收藏0
  • 深入理解js引擎的执行机制

    摘要:深入理解引擎的执行机制最近在反省,很多知识都是只会用,不理解底层的知识。在阅读之前,请先记住两点是单线程语言的是的执行机制。所以,是存在异步执行的,比如单线程是怎么实现异步的场景描述通过事件循环,所以说,理解了机制,也就理解了的执行机制啦。 深入理解js引擎的执行机制 最近在反省,很多知识都是只会用,不理解底层的知识。所以在开发过程中遇到一些奇怪的比较难解决的bug,在思考的时候就会收...

    feng409 评论0 收藏0
  • 前端进阶系列(八):JS执行机制

    摘要:一直以来,对的执行机制都是模棱两可,知道今天看了文章这一次,彻底弄懂执行机制和的规范和实现,才对的执行机制有了深入的理解,下面是我的学习总结。个要点是单线程语言是的执行机制,为了实现主线程的不阻塞,就这么诞生了。 一直以来,对JS的执行机制都是模棱两可,知道今天看了文章—《这一次,彻底弄懂JavaScript执行机制》和《Event Loop的规范和实现》,才对JS的执行机制有了深入的...

    JackJiang 评论0 收藏0
  • Event Loop - JS执行机制

    摘要:心塞塞根据规范,事件循环是通过任务队列的机制来进行协调的。等便是任务源,而进入任务队列的是他们指定的具体执行任务回调函数。然后当前本轮的结束,主线程可以继续取下一个执行。 依然是:经济基础决定上层建筑。 说明 首先,旨在搞清常用的同步异步执行机制 其次,暂时不讨论node.js的Event Loop执行机制,以下关于浏览器的Event Loop执行机制 最后,借鉴了很多前辈的研究文...

    muddyway 评论0 收藏0
  • JS执行机制

    摘要:事件表每次调用函数或执行异步操作时,都会将其添加到事件表中,事件表负责记录每个事件完成后执行的回调函数,并监听事件,事件完成后会把事件的回调函数发送到事件队列。事件队列事件队列接收来自事件表的回调函数,并根据顺序执行。 前言 先上一段代码,可以根据自己之前对JS执行机制的理解,进行分析 console.log(script start); setTimeout(function() ...

    wow_worktile 评论0 收藏0
  • Javascript系列之javascript机制

    摘要:异步任务必须指定回调函数,当异步任务从任务队列回到执行栈,回调函数就会执行。事件循环主线程从任务队列中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称为。事件循环事件循环是指主线程重复从消息队列中取消息执行的过程。 参考链接:这一次,彻底弄懂 JavaScript 执行机制https://zhuanlan.zhihu.com/p/...从浏览器多进程到JS单线程,JS运行机制...

    13651657101 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<