JavaScript的执行机制

一、重要理论

    1、JavaScript是单线程语言,所有任务都是同步执行的。但是可以通过同步的方法实现异步执行。

    2、Event loop(事件循环)是JS的执行机制,也是JS实现异步执行的一种方法。

    3、JS的执行和运行的区别

            JS可以在不同的环境中执行,比如浏览器、node等,但是不同的环境执行方式是不同的。

            但是不管在那种环境下JS运行是统一的,运行是指JS的解析引擎。

二、JS的执行机制

    1、同步任务、异步任务

    按照JS是单线程语言的特点,JS执行机制应该是所有的执行任务都要排队依次等待执行。但这样的速度肯定会很慢,这样就有了同步任务和异步任务之分

    如上图,当JS开始执行后,所有的同步任务进入主线程依次排队执行,异步任务则被送入Event Table中注册函数,当指定的事件完成后由被送入Event Queue中等待主线程执行栈的同步任务执行完后调取异步任务的函数执行。

        如上图代码,setTimeout是异步任务,console.log()是同步任务,所以先执行console.log(),setTimeout则被送入Event Table中等待定时3s后注册函数,再被送入Event Queue中进入主程序执行栈中执行。

2、宏任务、微任务

    macro-task(宏任务): 整体JS代码、setTimeout、setInterval

    micro-task(微任务):Promise、process.nextTick   

事件循环(Event loop)

    宏任务和微任务都有自己的Event Queue,各自进入自己的Event Queue中等待执行。上图是事件循环的整体示意图。当一段代码载入内存中开始执行后,整体代码作为第一个宏任务开始执行,如果有微任务的话送入对应的Event Queue中,宏任务执行完毕后再执行微任务,之后接着执行宏任务,就这样循环依次执行,称之为事件循环(JS的执行机制)。

    上面代码的输出依次为: 1、7、6、8、9、11、10、12、2、4、3、5

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容