ES6模块与CommonJS模块有什么区别?

ES6 Module和CommonJS模块的区别:
CommonJS是对模块的浅拷贝,ES6 Module是对模块的引用,即ES6 Module只存只读,不能改变其值,具体点就是指针指向不能变,类似const
import的接口是read-only(只读状态),不能修改其变量值。 即不能修改其变量的指针指向,但可以改变变量内部指针指向,可以对commonJS对重新赋值(改变指针指向),
但是对ES6 Module赋值会编译报错。

1<script type="text/javascript"> 2 // CommonJS是对模块的浅拷贝 3 // lib.js 4 var counter = 3; 5 function incCounter() { 6 counter++; 7 } 8 module.exports = { 9 counter: counter, 10 incCounter: incCounter 11 }; 12 // main.js 13 var mod = require('./lib'); 14 15 console.log(mod.counter); // 3 16 mod.incCounter(); 17 console.log(mod.counter); // 3 18 </script> 19 <script type="text/javascript"> 20 // ES6 Module是对模块的引用 21 // lib.js 22 export let counter = 3; 23 export function incCounter() { 24 counter++; 25 } 26 27 // main.js 28 import { counter, incCounter } from './lib'; 29 console.log(counter); // 3 30 incCounter(); 31 console.log(counter); // 4 32 </script> 33 <script type="text/javascript"> 34 // m1.js 35 export var foo = 'bar'; 36 setTimeout(() => foo = 'baz', 500); 37 38 // m2.js 39 import {foo} from './m1.js'; 40 console.log(foo); //bar 41 setTimeout(() => console.log(foo), 500); //baz 42 </script>

ES6 Module和CommonJS模块的共同点:
CommonJS和ES6 Module都不可以对引入的对象进行赋值,即对对象内部属性的值进行改变。
但是可以添加属性

1<script type="text/javascript"> 2 // lib.js 3 export let obj = {}; 4 5 // main.js 6 import { obj } from './lib'; 7 8 obj.prop = 123; // OK 9 obj = {}; // TypeError 10 </script>
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java 复制Map对象(深拷贝与浅拷贝)

java复制Map对象(深拷贝与浅拷贝)CreationTime2018年6月4日10点00分Author:Marydon1.深拷贝与浅拷贝  浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象

JS 中的require 和 import 区别

在研究react和webpack的时候,经常看到在js文件中出现require,还有import,这两个都是为了JS模块化编程使用。CSS的是@import1.ES6模块的设计思想,是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。Require是CommonJS的语法,CommonJS的模块是对象,输入时