ES6模块化

一、ES6模块化简介

ECMA组织参考了众多社区模块化标准,终于在2015年,随着ES6发布了官方的模块化标准,后成为ES6模块化
ES6模块化具有以下的特点

  1. 使用依赖预声明的方式导入模块
    1. 依赖延迟声明
      1. 优点:某些时候可以提高效率
        2. 缺点:无法在一开始确定模块依赖关系(比较模糊)
    2. 依赖预声明
      1. 优点:在一开始可以确定模块依赖关系
        2. 缺点:某些时候效率较低
  2. 灵活的多种导入导出方式
  3. 规范的路径表示法:所有路径必须以./或…/开头

二、基本导入导出

1.基本导出

类似于 exports.xxx = xxxx
基本导出可以有多个,每个必须有名称
基本导出的语法如下:

//init.js
export 声明表达式

export {具名符号}
export var a = 1; //导出a,值为1,类似于CommonJS中的exports.a = 1
export function test() { //导出test,值为一个函数
};
export class Person {
};
export const name = "abc";

var age = 18;
var sex = 1;
export { age, sex };

由于基本导出必须具有名称,所以要求导出内容必须跟上声明表达式具名符号

2.基本导入

由于使用的是依赖预加载,因此,导入任何其他模块,导入代码必须放置到所有代码之前

对于基本导出,如果要进行导入,使用下面的代码

import {导入的符号列表} from "模块路径" 

注意以下细节:

  • 导入时,可以通过关键字as对导入的符号进行重命名
  • 导入时使用的符号是常量,不可修改(导入*后,当前模块不能修改值)
  • 可以使用*号导入所有的基本导出,形成一个对象
  • import "./b.js"只运行模块,不使用内部任何导出
  • 多次导入,只运行一次
//index.js
//import {a as a1} from './init.js';//导出a并重命名为a1
import * as a from "./init.js";//导出所有随便进行命名
console.log(a.a, a.age, a.name);

在这里插入图片描述

三、默认导入导出

1.默认导出

每个模块,除了允许有多个基本导出之外,还允许有一个默认导出
默认导出类似于CommonJS中的module.exports,由于只有一个,因此无需具名

具体的语法是

export default 默认导出的数据

export {默认导出的数据 as default//少见

由于每个模块仅允许有一个默认导出,因此,每个模块不能出现多个默认导出语句

//init.js
export var a = 1;
export var b = 2;//基本导出

export default {
    fn: function () { },
    name: "adsfaf"
};//默认导出

2.默认导入

需要想要导入一个模块的默认导出,需要使用下面的语法

import 接收变量名 from "模块路径"

类似于CommonJS中的

var 接收变量名 = require("模块路径")

如果希望同时导入某个模块的默认导出和基本导出,可以使用下面的语法

import 接收默认导出的变量, {接收基本导出的变量} from "模块路径"

注:如果使用*号,会将所有基本导出和默认导出聚合到一个对象中,默认导出会作为属性default存在

//index.js中
// import data from "./init.js" //将a.js模块中的默认导出放置到常量data中
//import data, { a, b } from "./a.js";//如果想基本和默认一起导入
import * as a from './a.js';
// console.log(data, a, b);
console.log(a);

在这里插入图片描述

3.注意

  1. 尽量导出不可变值
    当导出一个内容时,尽量保证该内容是不可变的(大部分情况都是如此)
    因为,虽然导入后,无法更改导入内容,但是在导入的模块内部却有可能发生更改,这将导致一些无法预料的事情发生
  2. 可以使用无绑定的导入用于执行一些初始化代码
    如果我们只是想执行模块中的一些代码,而不需要导入它的任何内容,可以使用无绑定的导入
import "模块路径"
  1. 可以使用绑定再导出,来重新导出来自另一个模块的内容
    有的时候,我们可能需要用一个模块封装多个模块,然后有选择的将多个模块的内容分别导出,可以使用下面的语法轻松完成
export {绑定的标识符} from "模块路径"
//m.js
export { a, b } from "./m1.js"
export { k, default, a as m2a } from "./m2.js"
export const r = "m-r";
//index.js
import * as m from "./m.js";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞羽逐星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值