首先,JS是一门单线程语言,这是因为它运行在浏览器的渲染主线程中,而渲染主线程只有一个。主线程其实是要承担很多工作的,如渲染页面,执行你的JS代码。若果说使用同步的方式去执行所有的JS代码,那么就极有可能导致主线程产生阻塞问题,那么渲染主线程就无法做到执行消息队列中的其他任务,导致页面卡顿,用户点击无反应等等。那浏览器就采取异步的方式来规避这种问题。当某些任务发生之时,比如发起的网络,事件的监听等,主线程会交给其他线程去处理,而主线程自己会立即结束任务的执行,去执行后续代码,当其他线程完成后会将你传入的回掉函数包装成任务加入到消息队列末,等待主线程调用。这样的一种模式下,浏览器就不会产生阻塞问题,从而最大限度的保证单线程的流畅运行。