require
是这个老一辈码农们在es6规范之前的规范中使用的命令,之前的规范有CommonJS规范、AMD、CMD、还有一个UMD,那为什么是require
不是别的呢,因为方便在node中使用。
好的,这又引入了一个问题,Q1CommonJS规范、AMD、CMD、还有一个UMD他们的区别又是什么,说实话我接在他们之后才接触的前端,我也没怎么用过,也没有什么话语权,只能上网翻看其他文章粗略理解记忆,对这个概念先保持不陌生的状态。(有的面试官还爱问,举个例子,你没用过html前几个版本,人家问你Html5的优点,你没用过老版本,你怎么说,说不出来能说明你h5用的不熟?),言归正传,require和import有几点差异:require
使用于CommonJS规范,import使用于ES6规范,两者区别实质上是两种规范的区别:
-
1.CommonJS(require)
- 1.对基本类型,属于复制;
a = require(b)
,b会被a缓存。 - 2.对于复杂数据类型,属于浅拷贝,浅拷贝的话就存在一个问题,修改a的话b也会被修改。(Q2又引出一个问题:怎么阻止这种情况发生?)。
- 3*.在使用require命令加载模块时,就会运行整个模块的代码(同步加载)。
- 4.使用require命令加载加载过的模块时,不会再执行一次而是从缓存中取,除非清除缓存。
- 1.对基本类型,属于复制;
-
2.ES6模块(import)
- 1.import属于【动态只读引用】,即
import a from b
a是只读变量,不论基本数据类型还是复杂数据类型。 - 2*.import虽然写在文件顶部,但是脚本执行时,在碰到这个只读变量的时候,才执行被加载的模块(异步加载)。
- 3.对于动态来说,原始值发生变化,import加载的值也会发生变化。不论基本类型还是复杂类型。
- 1.import属于【动态只读引用】,即
好文推荐:
- 1.A1:CommonJS规范、AMD、CMD、还有一个UMD他们的区别又是什么,详细讲解每个规范的优缺点。
- 2.A2:立即执行函数 同时,此篇文章更详细的讲解了CommonJS(同步)发展到AMD(支持异步),再衍生出CMD以及UMD出现的意义。
关联公众号:一线码农
或扫码关注:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。