零碎
一、同步代码和异步代码
- 同步代码:
- 异步代码:
- 被调用后不阻塞代码继续执行,在将来完成后触发一个回调函数
二、回调函数地狱
- 是什么:
- 在回调函数中嵌套回调函数,一直嵌套下去就形成了回调函数地狱
- 缺点:
三、async函数和await关键字
- async函数
- 使用async关键字声明的函数
- 是AsyncFunction构造函数的实例
- await关键字
- 取代then函数,等待获取Promise对象成功状态的结果值
- async和await
- 作用
- 以一种更简洁的方式写出基于Promise的异步行为代码,这样就不用链式调用promise了
- 如何捕获错误
- try...catch
- 标记要尝试的语句块,并指定一个出现异常时抛出的错误
- try
- 包裹可能产生错误的代码
- 如果try里的某行代码报了错,剩余代码不会执行
- catch(error)
四、事件循环(EventLoop)
- 是什么:
- 执行代码和收集异步任务,在调用栈空闲时,反复调用任务队列里回调函数执行机制
- 为什么要学:
- 为什么要有这个:
- 由于JS是单线程,异步代码会阻塞JS引擎,设计这个有利于减少阻塞
- 作用:
- 负责执行代码、收集和处理事件以及执行队列中的子任务
- JS内代码如何执行:
- 先执行同步代码
- 异步代码交与宿主浏览器环境(事件都是异步代码)
- 当异步代码有了结果后,将回调函数放入任务队列排队
- 当调用栈空闲后,反复调用任务队列里的回调函数
五、异步任务
- 分类
- 宏任务(后执行)
- 由浏览器环境执行的异步代码
- 比如
- JS脚本执行事件(script)+setTimeout/serInterval+AJAX请求完成事件+用户交互事件
- 微任务(先执行)
- 由JS引擎环境执行的异步代码
- Promise对象.then()