1,严格模式
ES6 的模块自动采用严格模式,不管你有没有在模块头部加上use strict
;。
严格模式主要有以下限制。
- 变量必须声明后再使用
- 函数的参数不能有同名属性,否则报错
- 不能使用with语句
- 不能对只读属性赋值,否则报错
- 不能使用前缀 0 表示八进制数,否则报错
- 不能删除不可删除的属性,否则报错
- 不能删除变量delete prop,会报错,只能删除属性delete global[prop]
- eval不会在它的外层作用域引入变量
- eval和arguments不能被重新赋值
- arguments不会自动反映函数参数的变化
- 不能使用arguments.callee
- 不能使用arguments.caller
- 禁止this指向全局对象
- 不能使用fn.caller和fn.arguments获取函数调用的堆栈
- 增加了保留字(比如protected、static和interface)
其中,尤其需要注意this的限制。ES6 模块之中,顶层的this指向undefined,即不应该在顶层代码使用this。
2,export 命令
模块功能主要有两个命令组成:export
和import
。
-
export
命令主要用于规定模块的对外接口 -
import
命令主要用于引入其他模块提供的功能
模块:一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取一个模块内部的某个变量,就必须使用
export
关键字输出该变量。
下面是一个js文件,里面使用export
关键字向外输出变量。
// profile.js
//单个输出变量
//声明的同时,export导出
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;
上面的js文件,ES6就会视其为一个模块,里面使用export
向外暴露了三个变量,export
除了向上面那样单个向外暴露变量,还可以批量向外输出变量
//批量输出变量
//先声明赋值,然后批量导出
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;
export { firstName , lastName , year}