JS事件循环Loop

165 阅读1分钟

1.浏览器是多进程的,js是单线程

1.浏览器多线程问题前往 这里是链接
2.js是单线程,如果所有任务都是在主线程中执行,必然会导致阻塞
3.拓展:js的加载、html解析及加载、css加载,三者之间是否会影响?

2.执行栈和任务队列

1.执行栈:js调用一个方法的时候,会生成一个与这个方法对应的上执行环境(context),又称为执行上下文;
因为js是单线程,同一时间只能执行一个方法,所以将一系列一次被调用的时候会排队,这个排队的地方就叫做执
行栈
2.任务队列:主线程在js解析事件方法时,遇到同步的方法,放入执行栈中执行,如果遇到异步事件,不会立刻
执行,而是放入与执行栈对应的另一条任务队列里面,等待执行栈中的方法执行完毕后,主线程才会从任务队列中
查询异步任务并放入执行栈中执行回调函数

3.事件方法分为同步任务和异步任务

1.同步方法:在执行栈中执行,立刻返回结果
2.异步方法:在任务队列中执行,返回回调函数

4.异步任务分为宏任务和微任务

1.宏任务
    setTimeoutsetInterval
2.微任务
    ajax、new Promise
    
tips:微任务的优先级高于宏任务

5.js事件循环loop流程图

image.png