Js 执行栈! 如何理解?!小白篇

js  执行栈分为  主线程,异步任务,任务队列;

背景:由于JS是单线程执行语言,所以如果遇到因执行事件过程过长或者执行复杂度过高而引起阻塞会影响到后面程序进行。

为了减少这种情况的出现,JS引入了 异步的机制; 

异步操作从字面上就能看出 是不需要等待其他任务完成就能开始执行。但是也不代表它作为异步就破坏了JS作为单线程语言的背景;为了能更清晰的解释,就直接上图把;

Js 执行栈! 如何理解?!小白篇           Js 执行栈! 如何理解?!小白篇

可能有的小伙伴就会疑惑明明是单线程同时存在多个任务在进行,其实按我理解很简单,因为每个异步线程的最终都会再次放入主线程,并且一个一个执行完毕!

为了让大家有更好的理解,我们来一道题目把;

 

Js 执行栈! 如何理解?!小白篇

 

emm

emm

emm

emm

emm

答案是 0 1 4 3 2

整个流程 就是主线程首先遇到0并且执行输出,遇见1执行,x()执行,遇见遇见res()状态改变,.then(fn)回调函数放入微任务队列中。遇见await fn 等待fn执行完成之后再执行之后的。执行4,主线程执行完毕,询问任务队列,执行3 执行2

好了,今天就分享这么多吧,如果有错误观点或者不够详细,欢迎大家踊跃发言,共勉!