Skip to main content

异步

什么是异步

代码在执行的时候 会遇到一些无法立即处理的任务

比如:

  • 计时完成需要执行的任务 -- setTimeout setInterval
  • 网络通信完成之后需要执行的任务 -- XHR Fetch
  • 用户操作完成需要执行的任务 -- addEventListener

如果让渲染主线程等待这些任务的时机达到 , 就会导致主线程长期处于【阻塞】的状态 , 从而导致浏览器卡死

event-loop

渲染主线程 承担着极其重要的工作 无论如何都不能阻塞

所以浏览器选择异步来解决这个问题

thread

使用异步的方式 可以使浏览器主线程 永不阻塞

如何理解 JS 的异步

tip

JS 是一门单线程的语言 , 这是因为它在浏览器渲染主线程中,而渲染主线程只有一个。而渲染主线程承担着诸多的工作 渲染页面, 执行 JS 都在其中执行。

如果使用同步的方式 极有可能就会造成主线程阻塞 从而导致消息队列里面的其他任务没有得到执行 导致浏览器的页面无法得到及时更新 造成浏览器卡死的现象.

所以浏览器采用异步的方式来避免这种问题 当计时器 网络、事件监听、主线程会将这些任务交给其他线程去处理 自身立即结束任务的执行 转而去执行后续的代码。

当其他线程完成的时候就会把事先传递好的回调函数放在消息队列的末尾 等待主线程调度执行