js是单线程语言
JavaScript是一种单线程的编程语言,指主线程只有一个,同一时间只能做一件事,所有任务都需要排队依次完成。但是一旦有耗时任务就会有代码阻塞(因为要等上一行代码执行完,再执行下一行代码)。我们把代码(任务)分为:同步任务和异步任务
为了解决这一问题,js主线程的执行栈执行那些非耗时的同步代码,将那些耗时的异步任务都交给宿主环境(浏览器,node.js)去执行
事件循环机制(Event Loop)
事件循环分为两种,分别是浏览器事件循环和node.js。事件循环Event Loop,其实就是JS引擎管理事件执行的一个流程,具体由运行环境确定。目前JS的主要运行环境有两个,浏览器和Node.js。同步代码放入执行栈中排队执行,异步代码等待时机成熟(触发条件)送入任务队列排队等待。执行栈执行完毕,会去任务队列查看是否有待执行的异步任务的回调函数,有就送到执行栈执行,反复循环查看执行。这个过程是事件循环(eventloop)
总结:
1.js是单线程,防止代码阻塞,把代码分为:同步和异步
2.同步代码给js引擎执行,异步代码交给宿主环境
3.同步代码放入执行栈中,异步代码在宿主环境中执行完之后将其回调函数放入任务队列排队
4.执行栈里的同步代码执行完毕之后,回去任务队列查看是否有待执行的异步任务,有就送到执行栈中执行
5.执行栈执行完之后去任务队列查看,反复循环查看执行,这个过程就叫事件循环