Web前端知识点

JavaScript的执行机制

2018-09-07  本文已影响0人  浪漫天下

一、重要理论

    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

上一篇下一篇

猜你喜欢

热点阅读