2

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命令加载加载过的模块时,不会再执行一次而是从缓存中取,除非清除缓存。
  • 2.ES6模块(import)

    • 1.import属于【动态只读引用】,即import a from ba是只读变量,不论基本数据类型还是复杂数据类型。
    • 2*.import虽然写在文件顶部,但是脚本执行时,在碰到这个只读变量的时候,才执行被加载的模块(异步加载)。
    • 3.对于动态来说,原始值发生变化,import加载的值也会发生变化。不论基本类型还是复杂类型。

好文推荐:

关联公众号:一线码农
或扫码关注:
图片描述


yzbao
626 声望19 粉丝

Uncaught ReferenceError


引用和评论

0 条评论