你可能需要知道的前端小知识——JavaScript的执行
回顾
JavaScript的执行
JavaScript引擎会常驻于内存中,等待宿主把JavaScript代码或者函数传递给它执行,这样的任务是宏观任务
- 在
ES5之后,JavaScript引入了Promise,不需要宿主发起,JavaScript引擎本身也可以发起任务,这样的任务是微观任务
- 有了宏观任务和微观任务机制,就可以实现
JavaScript引擎级和宿主级的任务
宏观任务
JavaScript引擎在执行任务之前,都是在等待宿主分配任务,有任务就执行,执行后再等待。
JavaScript的每次执行,都是一个宏观任务。
- 多个宏观任务使用队列来管理。
- 在宏观任务中,
JavaScript的Promise还会产生异步代码。JavaScript必须保证这些异步任务在一个宏观任务中。所以,每个宏观任务中又包含一个微观任务队列。
宿主API会添加宏观任务进入宏观任务队列
微观任务
Promise
- 需要进行异步操作的函数,先不返回真的结果,先返回一个承诺。在合适的时机,选择等待这个承诺兑现。
Promise.then是一个异步执行的函数
async/await
- 只使用
Promise,发现代码结构和回调函数的写法并没有很大的改进,async/await和Promise配合使用,可以有效的改善代码结构,一些异步的函数看上去更“像”同步。
- 运行时基础是
Promise。
- 在
function关键字前加上async关键字,在函数体内就可以使用await来等待Promise。
- 可以嵌套使用。
总结
- 程序 = 数据 + 算法。
JavaScript程序相关的数据类型和执行相关的总结就是这些了。
- 更多的可以查看专栏。
- 有不同的想法,欢迎留言评论。