简单聊聊JavaScript的事件循环机制_第1页
简单聊聊JavaScript的事件循环机制_第2页
简单聊聊JavaScript的事件循环机制_第3页
简单聊聊JavaScript的事件循环机制_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第简单聊聊JavaScript的事件循环机制目录前言概念举个栗子TIP再次举个栗子总结

前言

JavaScript是一门单线程的弱类型语言,但是我们在开发中,经常会遇到一些需要异步或者等待的处理操作。

类似ajax,亦或者ES6中新增的promise操作用于处理一些回调函数等。

概念

在JavaScript代码执行过程中,可以分为同步队列和异步队列。

同步任务类似我们常说的立即执行函数,不需要等待可以直接进行,可以直接进入到主线程中去执行,类似正常的函数调用等。

异步队列则是异步执行函数,类似ajax请求,我们在发起的过程中,会进入到一个异步队列,加载到任务当中时,需要进行等待,之后才能进行返回值的处理。

举个栗子

下面一段代码,我们可以先了解一些一些关于事件循环机制的一些基本的原理

console.log('1');

setTimeout(function(){

console.log('4');

},0);

Promise.resolve().then(function(){

console.log('2');

}).then(function(){

console.log('3');

console.log('5');

我们将代码打印到控制台当中,输出结果是:1,5,2,3,4

我们知道,在JavaScript中,类似定时器,以及ES6新增的promise是异步函数,回到我们上面所说的队列的概念当中,不难得出,1和5为同步执行队列

在执行完同步队列中的代码之后,再执行异步队列中的代码。

TIP

在解析异步队列的promise和定时器中,我们发现,定时器setTimeout是后执行于promise,这里我们引入JavaScript规范中的宏任务(MacroTask)和微任务(MicroTask)的概念

在JavaScript中,宏任务包含了:script(整体代码)、setTimeout、setInterval、I/O、UI交互事件、setImmediate(Node.js环境)

微任务:Promise、MutaionObserver、process.nextTick(Node.js环境)

再回到上面的定时器和promise的问题,这时候我们知道,JavaScript中,当有异步队列的时候,优先执行微任务,再执行宏任务

再次举个栗子

假如在异步队列当中存在异步队列时,我们需要怎么处理

console.log(1);

setTimeout(function(){

console.log(5);

},10);

newPromise(resolve={

console.log(2);

resolve();

setTimeout(()=console.log(3),10);

}).then(function(){

console.log(4);

console.log(6);

将代码执行到控制台中,得出的打印顺序是:1,2,6,4,5,3

不同于例子1当中的promise,打印2是优先于6执行的,由此我们可以知道,newPromise在执行过程中,在未执行resolve或者rejected前,所执行的代码均为同步队列中的代码。再看4,5,3的执行顺序,在执行微任务promise执行回调resolve之后,对应的then立即执行在打印结果中,定时器5优先执行于-属于微任务promise中的宏任务定时器3,定时器5这个宏任务是在promise微任务这个队列之后就加进去,在promise执行完成then回调之后,promise中的宏任务才加入到队列当中,因此在定时器5之后执行

总结

在JavaScript中,宏任务包含了:script(整体代码)、setTimeout、setInterval、I/O、UI交互事件、setImmediate(Node.js环境)

微任务:Promise、MutaionObserver、process.nextTick(Node.js环境);

在执行过程中,同步代码优先

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论