当前位置:   article > 正文

ES6—Module 的语法

ES6—Module 的语法

export命令

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。

模块功能主要由两个命令构成:exportimportexport命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。

一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。

  1. //profile.js
  2. //分别暴露
  3. /* export let firstName = "li";
  4. export let lastName = "siyu";
  5. export function birthdy() {
  6. console.log("hello world");
  7. } */
  8. //统一暴露(优先使用)
  9. let firstName = "li";
  10. let lastName = "siyu";
  11. function birthdy() {
  12. console.log("hello world");
  13. }
  14. export { firstName, lastName, birthdy };

通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名。

  1. function v1(a, b) {
  2. return a * b;
  3. }
  4. function v2(a, b) {
  5. return a - b;
  6. }
  7. export { v1 as streamV1, v2 as streamV2, v2 as streamVersion };

重命名后,v2可以用不同的名字输出两次。

需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。

  1. //写法一
  2. export let m = 1;
  3. //写法二
  4. let p = 2;
  5. export { p };
  6. //写法三:
  7. let q = 3;
  8. export { q as n };

另外,export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。

  1. export var foo = "bar";
  2. setTimeout(() => {
  3. foo = "baz";
  4. }, 500);

上面代码输出变量foo,值为bar,500 毫秒之后变成baz。

最后,export命令可以出现在模块的任何位置,只要处于模块顶层就可以。如果处于块级作用域内,就会报错

  1. function fool() {
  2. export default 'bar' // SyntaxError
  3. }
  4. fool()

上面代码中,export语句放在函数之中,结果报错。

import命令

使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。

  1. <script type="module">
  2. import { firstName, lastName } from "./profiles.js";
  3. function setName() {
  4. return firstName + " " + lastName;
  5. }
  6. console.log(setName());
  7. </script>

上面代码的import命令,用于加载profile.js文件,并从中输入变量。import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。

如果想为输入的变量重新取一个名字,import命令要使用as关键字,将输入的变量重命名。

  1. <script type="module">
  2. import { firstName as first, lastName } from "./profiles.js";
  3. function setName() {
  4. return first + " " + lastName;
  5. }
  6. console.log(setName());
  7. </script>

除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面。

  1. import * as name from "./profiles.js";
  2. //可以使用"./profiles.js",中所有export出来的变量
  3. console.log(name.m);

export default命令

从前面的例子可以看出,使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。但是,用户肯定希望快速上手,未必愿意阅读文档,去了解模块有哪些属性和方法。

为了给用户提供方便,让他们不用阅读文档就能加载模块,就要用到export default命令,为模块指定默认输出。

  1. // export-default.js
  2. export default function () {
  3. console.log('foo');
  4. }

上面代码是一个模块文件export-default.js,它的默认输出是一个函数。

其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。

  1. // import-default.js
  2. import customName from './export-default';
  3. customName(); // 'foo'

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/294736
推荐阅读
相关标签
  

闽ICP备14008679号