JS事件循环机制

javascript 是单线程。

必须记住~

new Promise() // new 一个对象瞬间执行的,

.then 是异步(微任务)

微任务跟在当前宏任务之后执行的,整体代码(javascript标签内的代码)为宏任务。

事件循环机制是:优先执行宏任务,当执行完一个宏任务时(同时也会执行跟在当前宏任务之后的所有微任务),会执行另外一个宏任务(同时也会执行跟在当前宏任务之后的所有微任务)... 直到所有任务全部执行完毕。

小试身手--如下:

例子1

代码的执行逻辑:

    ① 在截图例子中, script标签内为所有 js代码 为宏任务一,代码开始执行 js代码时

    ② 遇见 console.log('script start') 时,代码直接执行,在浏览器的控制台会输出第一项 script start;

    ③ 遇见 setTimeout 时,发现它为宏任务二,先放到任务队列中,先放过它~

    ④ 遇到 promise.then() 时,发现它是微任务,会立即跟随在宏任务一后,

    ⑤ 遇见console.log('script end')时,代码直接执行,在浏览器的控制台中输出第二项 script end;

    ⑥ 再往后,发现没有要执行的js代码了,说明宏任务一执行完成,接下来就要执行跟随在宏任务一后的微任务,会执行 Promise.then() 里的代码,在浏览器的控制填中输出第三项 promise1 以及第四项 promise2,至此第一个宏任务及跟在其后的所有微任务都执行完毕。

    ⑦ 接下来会执行第二个宏任务 setTimeout ,发现就仅需要执行 console.log('setTimeout');所以在控制台会直接输出 第五项 setTimeout, 至此代码执行完毕。

截图中的整体代码结果为:

script start

script end

promise1

promise2

setTimeout

源码传送门:https://codepen.io/enjoykai/pen/MWvPLPd?editors=1012

你可能感兴趣的:(JS事件循环机制)