每个文件本身都是模块,在文件中定义的类、变量、常量和函数对这个文件而言都是私有(private)的,除非它们被显式导出。另外,一个模块导出的值只有在显式导入它们的模块中才可以使用。
虽然模块中可同时存在命名导出和默认导出,但作为最佳实践只使用命名导出和默认导出中的一种。
当使用场景为需要导出多个值的时候,只使用命名导出。
当使用场景为只导出一个值(通常是一个类或函数)的时候,只使用默认导出。
1.命名导出(named export)
要从 ES6 模块中导出类、变量、常量或函数,只需要在声明前添加 export
关键字即可。
//多个export方式(命名导出)
export class Circle {
constructor(r) { this.r = r; }
area() { return PI * this.r * this.r; }
}
export const PI = Math.PI;
export function degreesToRadlans(d) { return d * PI / 180; }
//一个export方式(命名导出)
class Circle {
constructor(r) { this.r = r; }
area() { return PI * this.r * this.r; }
}
const PI = Math.PI;
function degreesToRadlans(d) { return d * PI / 180; }
//不带别名
export { Circle, degreesToRadians, PI };
//带别名
export { Circle as 类别名, degreesToRadians as 函数别名, PI as 常量别名 };
2.默认导出(default export)
使用命名导出,只对有名称的声明有效,而使用默认导出,则可以导出任意表达式,包括匿名类表达式、匿名函数表达式、对象字面量。
export default class [BitSet] {
//同等命名导出的语法
class BitSet {
//类体
}
export { Bitset as default };
export default function [函数名](参数){
//函数体
}
//同等命名导出的形式
function 函数名(参数){
//函数体
}
export { 函数名 as default };
3.导入模块
模块外围的引号支持单引号('模块'
)或双引号("模块"
)。
模块必须是一个以“/
”开头的绝对路径,或者是一个以“./
”或“../
”开头的相对路径,又或者是一个带
有协议及主机名的完整URL。ES6模块规范不支持类似“util.js
”的非限定模块标识符字符串。
//不带别名
import { 类名, 函数名, 常量名 } from '模块';
//带别名
import { 类名 as 类别名, 函数名 as 函数别名, 常量名 as 常量别名 } from '模块';
//命名导出
//导入全部
import * as stats from "./stats.js";
//导入多个
import { mean, stddev } from "./stats.js";
//只导入一个
import { mean } from "./stats.js";
//默认导出时有名称
import BitSet from './bitset.js';
//默认导出时无名称
import { default as 别名 } from './fooModule.js';
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/3556.html