里面怎么使用import引用_谈谈模块化的 require 和 import

一、区别

  1. require是commonjs的规范,在node中实现的api,import是es的语法,由编译器处理。所以import可以做模块依赖的静态分析,配合webpack、rollup等可以做treeshaking。
  2. commonjs导出的值会复制一份,require引入的是复制之后的值(引用类型只复制引用),es module导出的值是同一份(不包括export default),不管是基础类型还是应用类型。
  3. 写法上有差别,import可以使用import * 引入全部的export,也可以使用import aaa, { bbb}的方式分别引入default和非default的export,相比require更灵活。

二、require和import会不会循环引用?

答案是不会,因为模块执行后会把导出的值缓存,下次再require或者import不会再次执行。这样也就不会循环引用了。比如a引入了b,b引入了a,如果a再次执行那么会再引入b,那就循环起来了,但实际上会做缓存,再次引入不会再执行。可以通过require.cache来查看缓存的模块,key为require.resolve(path)的结果。

三、模块中有定时器改变了导出的值,导出的值会不会变?

// a.js
let a = 1
setTimeout(() => {a = 2
}, 1000)
module.exports = a// test.js
const a = require('./a')
setTimeout(() => {console.log(a)
}, 2000)// a2.js
let a = 1
setTimeout(() => {a = 2
}, 1000)
export {a
}// test2.js
import { a } from './a2'setTimeout(() => {console.log(a)
}, 2000)

结果是import引入的值是2,而require引入的值一直是1,这也是require和imort很重要的一个区别,es module的export导出的值会静态的绑定,而commonjs exports导出的值是一个对象,会复制一份。这样也就出现了这样的现象。

四、总结

问 require和import的区别就是问commonjs和es module的区别,这两者一个是api的规范,一个是语言的语法,所以后者可以做静态分析,基于这个实现treeshaking,同时es module会静态的绑定导出的值,而commonjs会复制一份。但两者都会做缓存,所以不会有循环引用问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HJ107 求解立方根

https://www.nowcoder.com/practice/caf35ae421194a1090c22fe223357dca 强行二分,这是一种不好的解法,缝缝补补,又臭又长 import java.util.Scanner; import java.math.BigDecimal;public class Main{public static void main(String[] arg…

mysql if exists用法_MySQL中EXISTS的用法

比如在Northwind数据库中有一个查询为SELECT c.CustomerId,CompanyName FROM Customers cWHERE EXISTS(SELECT OrderID FROM Orders o WHERE o.CustomerIDc.CustomerID)这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是Cus…

二叉搜索树的建立和排序

二叉搜索树的建立和排序今天面了一家自研,有一道二叉搜索树的题目,但是自己做的不好 就是有几个学生和成绩,使用树来存储 左子树大于等于root,右节点小于root package org.example;public class Main {public static void main(S…

python绘图矩阵散点图_Python实践:seaborn的散点图矩阵(Pairs Plots)可视化数据

如何快速创建强大的可视化探索性数据分析,这对于现在的商业社会来说,变得至关重要。今天我们就来,谈一谈如何使用python来进行数据的可视化!一旦你有了一个很好的被清理过的数据集,下一步就是探索性数据分析(EDA)。EDA…

项目入口_新进展!石家庄地铁项目长安公园站出入口全部封顶

(通讯员 韩静娟)5月3日,伴随着长安公园站C出入口最后一方混凝土的浇筑到位,由中铁隧道局路桥公司承建的石家庄地铁2号线06标长安公园站出入口全部封顶,为石家庄地铁二号线顺利开通打下了坚实的基础。石家庄地铁2号线作为石家庄市南北向骨干线…

echo怎么把日志清空_shell脚本清空系统message日志

1 #/bin/bash2 #此脚本用来清空系统message日志文件3 #author:wyf date:16/10/304 LOG_DIR/var/log5 ROOT_UID06 #必须系统管理员权限才能执行7 if [ "$UID" -ne "${ROOT_UID}" ]8 then9 echo "Must be root to run this script"10 …

一直显示数据格式错误_Excel数据分析,新手最容易犯的10个建表错误

在使用Excel 建立数据表时,养成规范、良好的制表习惯至关重要,这不仅有益于后期数据分析的顺利进行,而且能体现专业素质。下面介绍一些新手容易犯的规范上的错误。1.随意插入空格很多新手在制表时容易随意插入空格,认为这样可以更…

python编程中的运算_Python编程中的四大运算法则

接触过编程的人都知道,编程中的数学知识无处不在,通过数学建模能够解决我们实际生活中的很多问题。当然这并不是说必须要成为一名数学大神才能学编程,但掌握数学知识在编程中的表达方法却是很有必要的,今天南京小码王Python培训班…

python selenium 怎么查找modal悬浮窗的内容_python教程:五分钟从pubmed down几万篇文献...

小编有话说:hello guys!昨天推送的stata做图教程您学会了吗?有任何疑问欢迎后台咨询我们热心的罗仔。今天换个口味,学学python自动化。作为科研小达人,不学一些旁门左道傍身怎么行!今天我们扒一扒pubmed,如…

安装git安装路径在哪_Atom插件安装与git的安装配置

一、Atom 插件在线安装1. 安装插件language-asciidoc 》语法高亮asciidoc-preview 》实时预览在dos 下通过cmd命令安装插件打开dos窗口 window可用快捷键 winr 再输入cmd安装language-asciidoc 输入 apm install language-asciidoc 如果apm不能识别请用 npm install language-…

如何让小程序页面更顺滑_小程序怎样让wx.navigateBack更好用的方法实现

相信只要开发过小程序,对wx.navigateBack 这个 api都不会陌生。在摩拜单车的小程序中,它也被改造的更方便满足复杂的业务需求,可谓之 增强型的 wx.navigateBack。先来看看官方文档中的用法:wx.navigateBack({delta: 2})delta 表示…

编制一个c语言成绩记录簿_C语言基础知识点模拟试题

一、单选题(每题2分,共25题,共50分)执行以下程序后,输出结果是( )int a 255;char c;ca;printf("%d",c);A)255 B)0 C)-3 D)-1有以下程序#include void main( ){ FILE *fp; int i,k0,n0; fpfopen("d1.dat&…

opencv方框内图像保存_opencv::将两幅图像合并后,在同一个窗口显示;并将合并的图像流保存成视频文件...

/*** file main-opencv.cpp* date July 2014* brief An exemplative main file for the use of ViBe and OpenCV*///#include #include "vibe-background-sequential.h"using namespacecv;using namespacestd;const int minArea 2; //舍去面积极小的方框const doubl…

闪灯什么意思_开夜车被对方闪了一下是什么意思?老司机:灯语都不懂,晚上别开车...

阅读本文前,请您先点击上面的“蓝色字体”,再点击“关注”,这样您就可以继续免费收到文章了。每天都有分享,完全是免费订阅,请放心关注。 注:本文转载自网络&#xff…

android radiogroup 获取点击位置_屏幕连点器,解放双手[Android]

这里是“微友集市”,我们坚持分享优质的资源,让更多人能用到更好的资源,少花冤枉钱。如果你有什么需要,可以给我们留言,我们会努力去为你寻找,或许你需要的,也是别人需要的...1自动点击器 是一款…

c语言 freopen txt_C语言文件操作函数freopen详细解析

今天做USACO 用到了文件的操作。 之前做USACO只是格式化的些 写 freopen("xxx.in","r",stdin) 和"freopen("xxx.out","w",stdout)"百度百科上是这么介绍的:函数名: freopen功 能: 替换一个流,或者…

apache poi excel显示 base64 图片_数据处理之带图片Excel数据处理解惑

小编最近项目中遇到一个大批量Excel数据提取的问题,因为Excel数据中含有图片,所以在程序处理时遇到了困难,小编花了点时间才解决了这个问题,所以在这里mark一下。1 问题描述首先来描述一下数据处理的需求,如下图所以是…

qt连接mysql创建表_如何在Qt中创建mysql数据库表?

我想创建表到MySQL数据库。我能够成功地打开数据库,但包含创建表命令不起作用的查询? 如果有人知道它,请让我知道我会很感激。如何在Qt中创建mysql数据库表?mydb QSqlDatabase::addDatabase("QMYSQL");mydb.setDatabas…

mysql加锁后怎么解除_Mysql查看死锁与解除死锁的深入讲解

前言前段时间遇到了一个Mysql 死锁相关的问题,整理一下。问题描述:Mysql 的修改语句似乎都没有生效,同时使用Mysql GUI 工具编辑字段的值时会弹出异常。什么是死锁在解决Mysql 死锁的问题之前,还是先来了解一下什么是死锁。死锁是…

mysql ssd优化_mysql ssd 优化

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户…