require 和 import

区别

  • CommonJs模块输出的是一个值的拷贝,ES6模块输出的是值的引用
  • CommonJs模块是运行时加载,ES6模块是编译时输出接口。

原理

ES6 模块的运行机制与 CommonJS 不一样。JS 引擎对脚本静态分析的时候,遇到模块加载命令import,就会生成一个只读引用。等到脚本真正执行时,再根据这个只读引用,到被加载的那个模块里面去取值。换句话说,ES6 的import有点像 Unix 系统的“符号连接”,原始值变了,import加载的值也会跟着变。因此,ES6 模块是动态引用,并且不会缓存值,模块里面的变量绑定其所在的模块。

语句 规范 调用 原理&特点
import ES6 编译时 语言规格层面支持模块功能。支持编译时静态分析,便于JS引入宏和类型检验。动态绑定。
require CommonJS 运行时 所有代码运行在模块作用域,不会污染全局作用域/ 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存 / 模块加载的顺序,按照其在代码中出现的顺序
上一篇:ES6 之对象


下一篇:ECMAScript6学习简易笔记(上)