ES Module
定义
- 使用关键字import进行导入 export 进行导出,并默认开启严格模式
导出方式
- export
(1) 定义: 声明语句导出
(2) 用法1: 后面可以直接跟声明语句
export const name = 'nano'
export function add(){}
export class Person { }
(3) 用法2: 导出和声明分开
const name = 'nano'
const obj = { age:18 }
function add(){}
export {
name, obj, add
}
注意: 这里并不是导出一个对象,而是导出一个变量集合
(4) 导出时起别名
i. 定义: 使用as关键字
const name = 'nano'
const obj = { age:18 }
function add(){}
export {
name as otherName,
obj as otherObj,
add as otherAdd
}
import {otherName, otherObj, otherAdd } from 'index.js'
备注: 一般都是在导入时候起别名,导出时起别名用的较少
导入的方式
普通导入
(1) 使用import导入import { foo } from './export.js'
起别名导入
(1) 定义:防止导入的变量命名冲突
(2) 使用as关键字import { foo as bar } from './export.js'
将所有内容导入在一个标识符中
(1) 定义: 使用*和as关键字import * as allVariable from './index.js' allVariable.foo() let obj = allVariable.obj
结合使用
- 定义:导入后导出的语法糖
export { foo } from './index.js' /* 等价于↓↓↓ */ import { foo } from './index.js' export { foo } /* 导入导出全部 */ export * from './index.js'
默认导出
- 默认导出方式1(常用)
/* export.js */ const name = 'nano' const obj = { age:18 } function add(){ console.log('add') } export default add /* import.js */ import bar from './export.js' bar() --> 'add'
- 默认导出方式2
/* export.js */ const name = 'nano' const obj = { age:18 } function add(){ console.log('add') } export{ name as nickName, obj as nickObj, add as default } /* import.js */ import bar from './export.js' bar() --> 'add'
- 与export区别
(1) 每一个js文件默认导出只能使用一次,并且后面不可以接声明语句
(2) 导入默认导出的变量时可以随意命名并且不需要 { } 包裹
导入同步异步的问题
- 普通导入方式是同步的,会阻塞下面的代码执行,需要下载完导入的文件才可以往后执行
/* 普通导入方式 */ import {a } from 'index.js' import foo from 'foo.js'
- import函数导入是异步的,不会阻止后续代码执行
(1) 定义: 使用import()函数导入,返回一个promise,内部调用resolve,通过.then函数获取导入的变量import('./index.js').then( res => { console.log(res) } )
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!