零碎

67 阅读2分钟

一、同步代码和异步代码

  1. 同步代码:
    • 逐行执行,需原地等待结果后,才继续向下执行
  2. 异步代码:
    • 被调用后不阻塞代码继续执行,在将来完成后触发一个回调函数

二、回调函数地狱

  1. 是什么:
    • 在回调函数中嵌套回调函数,一直嵌套下去就形成了回调函数地狱
  2. 缺点:
    • 不易读
    • 耦合度严重,牵一发动全身
    • 无法捕获异常

三、async函数和await关键字

  1. async函数
    • 使用async关键字声明的函数
    • 是AsyncFunction构造函数的实例
  2. await关键字
    • 取代then函数,等待获取Promise对象成功状态的结果值
  3. async和await
    • 作用
      • 以一种更简洁的方式写出基于Promise的异步行为代码,这样就不用链式调用promise了
    • 如何捕获错误
      • try...catch
        • 标记要尝试的语句块,并指定一个出现异常时抛出的错误
        • try
          • 包裹可能产生错误的代码
          • 如果try里的某行代码报了错,剩余代码不会执行
        • catch(error)
          • 接收错误信息

四、事件循环(EventLoop)

  1. 是什么:
    • 执行代码和收集异步任务,在调用栈空闲时,反复调用任务队列里回调函数执行机制
  2. 为什么要学:
    • 掌握js如何安排和运行代码
  3. 为什么要有这个:
    • 由于JS是单线程,异步代码会阻塞JS引擎,设计这个有利于减少阻塞
  4. 作用:
    • 负责执行代码、收集和处理事件以及执行队列中的子任务
  5. JS内代码如何执行:
    • 先执行同步代码
    • 异步代码交与宿主浏览器环境(事件都是异步代码)
    • 当异步代码有了结果后,将回调函数放入任务队列排队
    • 当调用栈空闲后,反复调用任务队列里的回调函数

五、异步任务

  1. 分类
    • 宏任务(后执行)
      • 由浏览器环境执行的异步代码
      • 比如
        • JS脚本执行事件(script)+setTimeout/serInterval+AJAX请求完成事件+用户交互事件
    • 微任务(先执行)
      • 由JS引擎环境执行的异步代码
      • Promise对象.then()