ECMAScript6 模块的用法
很长时间来,我都记不住模块的 export
和 import
的组合用法,希望烂笔头能有好记性。
模块的一些基本特性
- 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用
export
关键字输出该变量; - 一个模块的导出,是对外提供一个接口,如果直接提供值,则会报错,提供接口简单来说就是用花括号包起来,或者直接在前面加上
export || export default
前缀; export
语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值;import
命令输入的变量都是只读的,因为它的本质是输入接口。也就是说,不允许在加载模块的脚本里面,改写接口;例如引入了a变量,不允许将a赋值=123- 由于
import
是静态执行(可进行静态检查),所以不能使用表达式和变量,这些只有在运行时才能得到结果的语法结构; export default
命令其实只是输出一个叫做default
的变量,后面紧跟的a
变量等于将a
赋值给default
变量,所以它后面不能跟变量声明语句。
独立导出范例
// output.js 导出部分的js文件
let viewer = null
function add(a,b) {return a+b}
export { viewer, add }
// import.js 导入部分的文件
import { viewer, add } from "./output.js"
默认导出范例(1)
// output.js 导出部分的js文件
export default function add(a,b) {return a+b}
// import.js 导入部分的文件
import add from "./output.js"
add(1,1) // 2
默认导出范例(2)
// output.js 导出部分的js文件
let a = 4
export default a // export default 命令其实只是输出一个叫做 default 的变量,后面紧跟的 a 变量等于将 a 赋值给 default 变量,所以它后面不能跟变量声明语句
// import.js 导入部分的文件
import a from "./output.js"
console.log(a) // 4
直接执行范例
import "lodash" // 会执行所加载的模块
整体加载范例
// output.js 导出部分的js文件
let viewer = null
function add(a,b) {return a+b}
export { viewer, add }
// import.js 导入部分的文件
import * as output from "./output.js" // output 对象中不包含 export default 输出的内容
output.add(1,1) // 2
常量组织范例
// 常量独立文件
// constants/db.js
export const db = {
admin_username: 'admin',
admin_password: 'admin password'
};
// constants/user.js
export const users = ['root', 'admin', 'staff', 'ceo', 'chief', 'moderator'];
// 将这些文件输出的常量,合并在index.js里面。
// constants/index.js
export {db} from './db';
export {users} from './users';
// 使用的时候,直接加载index.js就可以了
// script.js
import {db, users} from './constants/index';