vue中函数为什么不能在异步操作里return出数据

一直有这疑惑,后在思索异步事件机制的时候略有体会,、这就涉及到主线程,支线程又名任务队列,

而这任务队列有两大分支宏任务和微任务,关于主线程与支线程的关系请看我另一篇文章

先看一个例子vue中函数为什么不能在异步操作里return出数据_第1张图片

为什么没有返回10,且听我细细道来~
首先,函数是作为一个执行操作,执行它

vue中函数为什么不能在异步操作里return出数据_第2张图片

 

里面后续加入含有异步操作,但是,但是--》》编译器进入函数时是同步的,进入函数到打印出  ‘我是同步’ ,这个过程都还是同步在主线程执行的

遇到setTimeout的时候,认定为异步操作就得把这段代码放到任务队列中执行,看直观图

vue中函数为什么不能在异步操作里return出数据_第3张图片vue中函数为什么不能在异步操作里return出数据_第4张图片

如图,先进入主线程执行完主线代码,而执行主线程代码时显然并没有return的这句代码的,因为它被拐跑了,问题来了:拐跑了return,那到时候setTimeout执行完再return还回来不就得了,在代码的世界里,出来混是没得还的,看看这句话,那个标红的字,主线程是不等人的,都说主线程是同步的嘛,所以主线程解析async函数到结尾都没有遇到return,就返回undefined了,

而任务队列里的return aa 这句代码怎么办,它已经跟它老子也就是async函数没有关系了,

它就是条简单的语句跟声明的 var bb = 100一样,没有作业,只是浏览器不报错而已

你可能感兴趣的:(javascript)