1、遵循的规范不同
require 是AMD规范引入方式
import 是es6的一个语法标准,兼容浏览器要转换成es5
2、调用时间
require是运行时调用,require是个函数所以require理论上可以运用在代码的任何地方
import是编译时调用,所以必须放在文件开头 且放在全局中引入
3、本质
require是赋值过程,其实require的结果就是对象、数字、字符串、函数等,再把require的结果赋值给某个变量
import是解构过程,但是目前所有的引擎都还没有实现import,我们在node中使用babel支持ES6,也仅仅是将ES6转码为ES5再执行,import语法会被转码为require
4、所属语法规范不同
import(es6语法)
import在编译时确定导入
路径只能是字符串常量
import会被提升到文件最顶部
导入的变量是只读的
import导入的是值引用,而不是值拷贝
模块内部值发生变化,会对应影响到引用的地方
import导入与导出需要有一一映射关系,类似解构赋值。
require(CommandJS规范)
它相当于module.exports的传送门,module.exports后面的内容是什么,require的结果就是什么,对象、数字、字符串、函数……再把require的结果赋值给某个变量,相当于把require和module.exports进行平行空间的位置重叠。
require理论上可以运用在代码的任何地方,甚至不需要赋值给某个变量之后再使用。
require(’./a’)(); // a