CommonJS规范的require与es6规范的import的区别

CommonJS的由来
在早期没有模块化思想时代码没有很好的编写规范,导致很多代码、逻辑重复、缺乏条理性且不易管理维护,这也让很多开发者头疼不已。随着JavaScript 社区的发展,社区为JavaScript制定了相应的规范,而CommonJS规范的提出得到了大家的承认和广泛的应用,2009年CommonJS就此诞生了。

CommonJS介绍
CommonJS实现了Javascript的模块化规范,规范了模块的特性和各模块之间的相互依赖性,使得代码可以更好的编写和维护,同时提高了代码的复用性。定义每个文件都是一个模块(module变量代表当前模块)并有自己的作用域,而每个文件里面定义的变量、函数、类,都是私有的,对于其他模块是不可见。模块的exports属性是对外的接口,只有通过exports导出的属性才能被加载识别。Node就是基于CommonJs规范实现的,因为CommonJS规范加载模块是同步的,而服务器中的Node模块都直接存储在服务器本地硬盘中的,加载起来自然比较快,可以说node项目是CommonJs规范目前的最好实践应用。

ECMAScript 6 (简称ES6)
ECMAScript是(European Computer Manufacturers Association Script)的缩写,它是由ECMA国际标准化定制的一项JavaScript脚本语言的标准化规范。ECMAScript 6 是ECMA在2015年发布的JavaScript 的规范标准,解决 ES5 的很多先天不足并引入了模块化思想。ES6模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系以及输入和输出的变量。

import
import是ES6中的语法标准也是用来加载模块文件的,import函数可以读取并执行一个JavaScript文件,然后返回该模块的export命令指定输出的代码。export与export default均可用于导出常量、函数、文件、模块,export可以有多个,export default只能有一个。

require与import的区别
1,require是CommonJS规范的模块化语法,import是ECMAScript 6规范的模块化语法;

2,require是运行时加载,import是编译时加载;

3,require可以写在代码的任意位置,import只能写在文件的最顶端且不可在条件语句或函数作用域中使用;

4,require通过module.exports导出的值就不能再变化,import通过export导出的值可以改变;

5;require通过module.exports导出的是exports对象,import通过export导出是指定输出的代码;

6,require运行时才引入模块的属性所以性能相对较低,import编译时引入模块的属性所所以性能稍高。

原文地址:https://www.cnblogs.com/samsara-yx/p/14959451.html