一直有这疑惑,后在思索异步事件机制的时候略有体会,、这就涉及到主线程,支线程又名任务队列,
而这任务队列有两大分支宏任务和微任务,关于主线程与支线程的关系请看我另一篇文章
先看一个例子
为什么没有返回10,且听我细细道来~
首先,函数是作为一个执行操作,执行它
里面后续加入含有异步操作,但是,但是--》》编译器进入函数时是同步的,进入函数到打印出 ‘我是同步’ ,这个过程都还是同步在主线程执行的
遇到setTimeout的时候,认定为异步操作就得把这段代码放到任务队列中执行,看直观图
如图,先进入主线程执行完主线代码,而执行主线程代码时显然并没有return的这句代码的,因为它被拐跑了,问题来了:拐跑了return,那等到时候setTimeout执行完再return还回来不就得了,在代码的世界里,出来混是没得还的,看看这句话,那个标红的等字,主线程是不等人的,都说主线程是同步的嘛,所以主线程解析async函数到结尾都没有遇到return,就返回undefined了,
而任务队列里的return aa 这句代码怎么办,它已经跟它老子也就是async函数没有关系了,
它就是条简单的语句跟声明的 var bb = 100一样,没有作业,只是浏览器不报错而已