🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来。其他语言都有这项功能,比如 Ruby 的`require`、Python 的`import`,甚至就连 CSS 都有`@import`,但是 JavaScript 任何这方面的支持都没有,这对开发大型的、复杂的项目形成了巨大障碍。 在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,完全可以取代 CommonJS 和 AMD 规范,成为浏览器和服务器通用的模块解决方案。 ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。CommonJS 和 AMD 模块,都只能在运行时确定这些东西。比如,CommonJS 模块就是对象,输入时必须查找对象属性。 ## 二、严格模式 ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";。 严格模式主要有以下限制; 1. 变量必须声明后再使用 2. 函数的参数不能有同名属性,否则报错 3. 不能使用with语句 4. 不能对只读属性赋值,否则报错 5. 不能使用前缀 0 表示八进制数,否则报错 6. 不能删除不可删除的属性,否则报错 7. 不能删除变量delete prop,会报错,只能删除属性delete global[prop] 8. eval不会在它的外层作用域引入变量 9. eval和arguments不能被重新赋值 10. arguments不会自动反映函数参数的变化 11. 不能使用arguments.callee 12. 不能使用arguments.caller 13. 禁止this指向全局对象 14. 不能使用fn.caller和fn.arguments获取函数调用的堆栈 15. 增加了保留字(比如protected、static和interface) ## 三、export和import 模块功能主要由两个命令构成:`export`和`import`。`export`命令用于规定模块的对外接口,`import`命令用于输入其他模块提供的功能。