前言
export和import是ES6提出的模块化规范。这篇文章主要就是详细介绍export和import的用法。
export
模块是独立的文件,该文件内部的所有的变量外部都无法获取。如果希望获取某个变量,必须通过export输出。
1. 输入变量用法
方法1
export let a = 'zhangsan';
方法2
let a = 'zhangsan';
export {a};
多个变量的输出
let a = 'zhangsan';
let b = 'lisi';
let c = 'wangwu';
export {a, b, c};
小结: 如果先定义变量,再使用export输出变量时,一定是export {变量};
2. 函数或类的用法
方法1
export function multiply(x, y) {
return x * y;
};
方法2
function multiply(x, y) {
return x * y;
}
export {multiply};
批量输出
function multiply(x, y) {
return x * y;
}
function add(x, y) {
return x + y;
}
export {multiply, add};
小结:如果先定义函数或类,再使用export输出函数或类时,一定是export {函数名或类名};
import
export定义了模块的对外接口,其他JS文件就可以通过import来加载这个模块。
1. 用法
import {a, add} from './utils';
小结:import导入export输出的变量或函数/类必须要使用大括号包裹,且导入的变量名必须与export中的一致。
2. module的整体加载
除了指定加载某个输出值,还可以用(*)指定一个对象,所有的变量都会加载在这个对象上。
export function multiply(x, y) {
return x * y;
}
export function add(x, y) {
return x + y;
}
import * as calculate from './util';
calculate.multiply(4, 7);
calculate.add(4, 7);
小结:使用整体加载的方式,import时不需要使用大括号,直接用*代表整体。
export default
之前的例子里,除了整体加载外,都需要知道定义的变量或函数名,如果用户只想用输出的内容,就可以使用export default;
1. 用法
export default function () {
console.log('nihao');
}
import test from './util';
test();
小结:使用export default 时,import语句不用大括号。
别名
在export或者import语句中可以使用as给变量、函数或者类设置别名。
function v1() { ... }
function v2() { ... }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};
import * as circle from './circle';
import()函数
import和export 命令只能用在模块的顶层,不能放在代码块中。否则会报错。这样的设计。可以提高编译器效率,但是没有办法实现运行时加载。
因为require是运行加载,所以import命令没有办法代替require的动态加载功能。因此引入了import()函数。完成动态加载。
1. 语法
import(specifier); // specifier用来指定所要加载的模块的位置
2. 用途
- 按需加载
button.addEventListener('click', event => {
import('./dialogBox.js')
.then(dialogBox => {
dialogBox.open();
})
.catch(error => {
})
})
- 条件加载
// import()可以放在if...else语句里,实现条件加载
if (condition) {
import('moduleA').then(...);
} else {
import('moduleB').then(...);
}