JS异步的理解

64 阅读1分钟

JS是一门单线程的语言,因为它运行在浏览器的渲染主线程中,而渲染主线程住有一个。渲染主线程承担许多工作,css解析,js代码执行,页面渲染都运行在其中。

如果只是用同步的方式,就会在部分场景:网络资源、请求加载,定时器,事件监听等情况因消息队列中其他任务无法执行而导致的主线程阻塞。一方面导致主线程因等待白白浪费时间,另一方面造成界面无法及时更新展示出来的卡顿,卡死现象。

所以浏览器采用异步的方式处理这个问题。

具体做法是:当网络资源、请求加载,定时器,事件监听这些任务发生时,主线程将这些任务交给其他线程去处理,主线程自身立即结束任务的执行,去消息队列中执行后续任务。而当其他线程结束时,将事先传递的回调函数包装为新任务返还给消息队列中,加入到消息队列末端,等待主线程调度执行。

在这种一步模式下,浏览器可以做完不阻塞,并且最大效率执行任务,保障单线程的流畅运行。