赞
踩
ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。
模块功能主要由两个命令构成:export
和import
。export
命令用于规定模块的对外接口,import
命令用于输入其他模块提供的功能。
一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export
关键字输出该变量。下面是一个 JS 文件,里面使用export
命令输出变量。
- //profile.js
- //分别暴露
- /* export let firstName = "li";
- export let lastName = "siyu";
- export function birthdy() {
- console.log("hello world");
- } */
-
- //统一暴露(优先使用)
- let firstName = "li";
- let lastName = "siyu";
- function birthdy() {
- console.log("hello world");
- }
- export { firstName, lastName, birthdy };
通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名。
- function v1(a, b) {
- return a * b;
- }
- function v2(a, b) {
- return a - b;
- }
- export { v1 as streamV1, v2 as streamV2, v2 as streamVersion };
重命名后,v2可以用不同的名字输出两次。
需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。
- //写法一
- export let m = 1;
- //写法二
- let p = 2;
- export { p };
- //写法三:
- let q = 3;
- export { q as n };
另外,export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。
- export var foo = "bar";
- setTimeout(() => {
- foo = "baz";
- }, 500);
上面代码输出变量foo,值为bar,500 毫秒之后变成baz。
最后,export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错
- function fool() {
- export default 'bar' // SyntaxError
- }
- fool()
上面代码中,export语句放在函数之中,结果报错。
使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。
- <script type="module">
-
- import { firstName, lastName } from "./profiles.js";
- function setName() {
- return firstName + " " + lastName;
- }
- console.log(setName());
- </script>
上面代码的import
命令,用于加载profile.js
文件,并从中输入变量。import
命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js
)对外接口的名称相同。
如果想为输入的变量重新取一个名字,import
命令要使用as
关键字,将输入的变量重命名。
- <script type="module">
-
- import { firstName as first, lastName } from "./profiles.js";
- function setName() {
- return first + " " + lastName;
- }
- console.log(setName());
- </script>
除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。
- import * as name from "./profiles.js";
- //可以使用"./profiles.js",中所有export出来的变量
- console.log(name.m);
从前面的例子可以看出,使用import
命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。但是,用户肯定希望快速上手,未必愿意阅读文档,去了解模块有哪些属性和方法。
为了给用户提供方便,让他们不用阅读文档就能加载模块,就要用到export default
命令,为模块指定默认输出。
- // export-default.js
- export default function () {
- console.log('foo');
- }
上面代码是一个模块文件export-default.js
,它的默认输出是一个函数。
其他模块加载该模块时,import
命令可以为该匿名函数指定任意名字。
- // import-default.js
- import customName from './export-default';
- customName(); // 'foo'
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。