javascript 是单线程。
new Promise() // new 一个对象瞬间执行的,
.then 是异步(微任务)
微任务跟在当前宏任务之后执行的,整体代码(javascript标签内的代码)为宏任务。
事件循环机制是:优先执行宏任务,当执行完一个宏任务时(同时也会执行跟在当前宏任务之后的所有微任务),会执行另外一个宏任务(同时也会执行跟在当前宏任务之后的所有微任务)... 直到所有任务全部执行完毕。
小试身手--如下:
代码的执行逻辑:
① 在截图例子中, 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