ES6 Module学习笔记
基本语法
export导出数据:
1
2
3export var color = "red";
export let name = "jacky";
export const magicNumber = 7;导出函数
1
2
3export function sum(num1, num2) {
return num1 + num2;
}导出类
1
2
3
4
5
6export class Rectangle {
constructor(length, width) {
this.length = length;
this.width = width;
}
}定义函数,然后导出引用
importimport { identifier1, identifier2 } from './example.js'导入绑定列表不是解构对象
- 导入单个
- 导入多个
- 导入整个模块
import * as example from './example.js' - 同一个模块只执行一次,实例化模块将保存在内存中
import export只能在其他语句之外import语句创建的是只读绑定,而非原始绑定。as关键词,更改导入导出的名字default模块默认值export default function(...) {...}export default sum;export { sum as default, a, b, c}
重新导出
export { sum as add } from './example'
其他
无绑定导入
- 内建对象(array, object)的共享定义可以在模块中访问,其更改效果可反映在其他模块中。
- 如
Array.prototype.pushAll = function(...) {...}可以通过import "./example.js"生效
加载模块
ES6只定义语法,没有定义如何加载。
加载机制抽象到一个未定义内部方法
HostResolveImportedModuleWeb 浏览器
<script>增加一个type:type="module"1
2
3
4
5<script type="module" src="./example.js"></script>
<script type="module">
import { sum } from "./example.js";
...
</script>当浏览器不能识别
type="module"时会忽略script标签加载时会自动应用
defer并按照html顺序加载,且都是按需加载,递归加载并解析相关资源,然后递归执行。异步加载
async保证所有模块都下载完成- 不保证模块执行顺序
作为worker加载,添加第二参数
{type: "module"}
模块说明符
/根目录./当前目录../父目录- URL 格式