ES6 - module

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

一、export

1.导出对象

----------第一种--------------
export var firstName = 'Michael';
export var lastName = 'Jackson';
export var year = 1958;
-----------第二种-------------
var firstName = 'Michael';
var lastName = 'Jackson';
var year = 1958;

export { firstName, lastName, year };

使用大括号指定所要输出的一组变量-应该优先考虑使用这种写法。因为这样就可以在脚本尾部,一眼看清楚输出了哪些变量。

2.导出函数

------------------------------------
export function multiply(x, y) {
  return x * y;
};
-----------------------------------
// 报错
function f() {}
export f;

// 正确
export function f() {};

// 正确
function f() {}
export {f};

从前面的例子可以看出,使用import命令的时候,用户需要知道所要加载的变量名或函数名,否则无法加载。

3.default导出

--------------------------
// 正确
export var a = 1;

// 正确
var a = 1;
export default a;

// 错误
export default var a = 1;
----------------------------
// export-default.js
export default function foo() {
  console.log('foo');
}

// 或者写成

function foo() {
  console.log('foo');
}

export default foo;

二、import

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

// main.js
import { firstName, lastName, year } from './profile.js';

function setName(element) {
  element.textContent = firstName + ' ' + lastName;
}

上面代码的import命令,用于加载profile.js文件,并从中输入变量。import命令接受一对大括号,里面指定要从其他模块导入的变量名。大括号里面的变量名,必须与被导入模块(profile.js)对外接口的名称相同。import后面的from指定模块文件的位置,可以是相对路径,也可以是绝对路径。如果不带有路径,只是一个模块名,那么必须有配置文件,告诉 JavaScript 引擎该模块的位置。如果多次重复执行同一句import语句,那么只会执行一次,而不会执行多次。

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

import { lastName as surname } from './profile.js';

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

// export-default.js
export default function () {
  console.log('foo');
}
--------------------------------
// import-default.js
import customName from './export-default';
customName(); // 'foo'

 上面代码的import命令,可以用任意名称指向export-default.js输出的方法,这时就不需要知道原模块输出的函数名。需要注意的是,这时import命令后面,不使用大括号。

 

参考:

https://es6.ruanyifeng.com/#docs/module

posted on 2021-07-20 20:14  TrustNature  阅读(37)  评论(0编辑  收藏  举报