js是一门单线程语言,因为它运行在浏览器渲染主线程中,而渲染主线程只有一个
渲染主线程又承担着诸多的任务,解析html,渲染页面,执行js都在其中运行
如果采用同步的方式,就极有可能导致渲染主线程阻塞,从而导致消息队列的其他任务无法得到执行
这会导致繁忙的主线程白白的消耗时间,其次也会导致页面无法及时更新,给用户造成卡顿现象
所以浏览器采用异步的方式来避免,具体方法是,当某些任务发生时,如计时器,网络,事件监听,等,主线程会将任务交给其他线程,随后自己立马结束任务的执行,转而去执行其他代码(任务),等其他线程完成时(交过去的任务的线程),将事先传递的回调函数包装成任务,加入到消息队列末尾排队,等待主线程的调度执行
这样的异步模式下,浏览器永不阻塞,从而最大限度的保证了单线程的流畅运行