宏任务 和 微任务、观察者以及模块

宏任务 和 微任务、观察者以及模块


一、宏任务 和 微任务

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

在这里插入图片描述

并发模型与事件循环

JavaScript 有一个基于事件循环的并发模型,事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。这个模型与其它语言中的模型截然不同,比如 C 和 Java。

运行时概念

接下来的内容解释了这个理论模型。现代 JavaScript 引擎实现并着重优化了以下描述的这些语义。
在这里插入图片描述

事件循环

JavaScript中,所有的任务都可以分为

  • 同步任务:立即执行的任务,同步任务一般会直接进入到主线程中执行
  • 异步任务:异步执行的任务,比如ajax网络请求,setTimeout定时函数等
    在这里插入图片描述

宏任务 和 微任务

第一个宏任务开始,直接暴露在script元素中的代码属于全局作用域。

console.log(1);

函数setTimeout本身的执行属于同步操作,但setTimeout第一个参数对应的函数属于异步任务.

setTimeout( () => console.log(2), 0 );

览器处理到script时会立即创建一个宏任务

   let p = new Promise((resolve, reject)=>{
   
       console.log(3);
       resolve();
   });

在当前宏任务中创建一个微任务

p.then( () => console.log(4) );

同一个script元素内属于一个宏任务,从第二个宏任务开始,在当前宏任务中创建一个微任务,并且用setTimeout注册一个宏任务。

setTimeout( () => console.log(6), 0 );

setTimeout注册的回调操作属于异步任务(宏任务)

setTimeout( add, 0, 2, 3 );

const endTime = Date.now() + 10000;

let showTime = () => {
   
    let datetime = new Date();
    console.log( 'macro task 3: ', datetime.toISOString() );
    if( datetime > endTime ) {
   
        clearInterval(timer); // 清除timer对应的定时器
    }
};

而由setInterval注册的回调操作属于异步任务(宏任务)

const timer = setInterval( showTime, 1000 
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值