关于Event Loop事件循环

一、Event Loop概念:

Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。

二、Event Loop:

同步任务和异步任务
为了防止某个耗时任务导致程序假死的问题,javaScript把待执行的任务分为了两类:

  • ​ 1.同步任务(syncchronous)
    又叫非耗时任务,指的是主线程上排队执行的那些任务
    只有前一个任务执行完毕,才能执行后一个任务

  • 2.异步任务(asyncchronous)
    ​ 又叫做耗时任务,异步任务由javaScript委托给宿主环境进行执行
    ​ 当异步任务执行完成后,会通知javaScript主线程执行异步任务的回调函数

三、同步任务与异步任务的执行过程:

在这里插入图片描述

	1.同步任务由JavaScript 主线程次序执行
	
	2.异步任务委托给宿主环境执行
	
    3.已完成的异步任务对应的回调函数,会被
	    加入到任务队列中等待执行
	    
	4.avaScript 主线程的执行栈被清空后,会
	   读取任务队列中的回调函数,次序执行
	   
	5.JavaScript 主线程不断重复上面的第 4 步

宏任务和微任务:

在这里插入图片描述

宏任务和微任务的根本区别:

1.常见的宏任务有:setTimeout setInterval ajax DOM事件

2.常见的微任务有:promise async/await

3.微任务的执行时间早于宏任务

4.微任务是由es6语法规定的,宏任务是浏览器规定的

宏任务与微任务的执行顺序:

在这里插入图片描述

每一个宏任务执行完毕后,都会检查是否还存爱待执行的微任务,如果有,则执行完所有的微任务之后,再继续执行下一个宏任务

经典案例:

console.log('start');
setTimeout(() => {
    
    
    console.log(1);
}); 
Promise.resolve('x').then(() => {
    
    
    console.log(2);
}).then(() => {
    
    
    console.log(3);
}).then(() => {
    
    
    console.log(4); 
})
console.log('end');

输入结果:start–>end–>2—>3–>4–>1

分析:

1.start和end属于同步代码优先执行

2.promise里的代码也属于同步代码,但.then里的代码属于异步代码中的微任务,稍后执行

3.setTimeout属于异步代码中的宏任务,最后执行

猜你喜欢

转载自blog.csdn.net/m0_66504310/article/details/128139886