ES6模块导出和导入

一、基本的导出

export 关键字将已发布代码部分公开给其他模块。最简单方法就是将 export放置在任意变量、函数或类声明之前,从模块中将它们公开出去:

二、基本的导入 

import { identifier1, identifier2 } from "./example.js";

当从模块导入了一个绑定时,该绑定表现得就像使用了 const 的定义。这意味着你不能再定义另一个同名变量(包括导入另一个同名绑定),也不能在对应的 import 语句之前使用此标识符(也就是要受暂时性死区限制),更不能修改它的值。

在此代码中, example.js 中所有导出的绑定都被加载到一个名为 example 的对象中,具名导出( sum() 函数、 multiple() 函数与 magicNumber )都成为 example 的可用属性。这种导入格式被称为命名空间导入( namespace import ),这是因为该 example 对象并不存在于 example.js 文件中,而是作为一个命名空间对象被创建使用,其中包含了example.js 的所有导出成员。

export 与 import 都有一个重要的限制,那就是它们必须被用在其他语句或表达式的外部。例如,以下代码有语法错误:

三、导入绑定的一个微妙怪异点 

ES6 的 import 语句为变量、函数与类创建了只读绑定,而不像普通变量那样简单引用了原始绑定。尽管导入绑定的模块无法修改绑定的值,但负责导出的模块却能做到这一点。例如,假设你想要使用以下模块:

当你导入了这两个绑定后, setName() 函数还可以改变 name 的值:

外部模块导入的 name 变量与在 example.js 模块内部的 name 变量对比,前者是对于后者的只读引用,会始终反映出后者的变化。就算后者的值在负责导出的模块中发生了变化,这种绑定关系也不会被破坏。模块导出与导入的绑定机制,与写在一个文件或模块内的代码是不同的。

 四、重命名导出与导入

用不同的名称来导出一个函数,你可以使用 as 关键字来指定新的名称,以便在模块外部用此名称指代目标函数:

假若模块导入函数时想使用另一个名称,同样也可以用 as 关键字:

五、导出默认值 -default 关键字

此模块将一个函数作为默认值进行了导出, default 关键字标明了这是一个默认导出。此函数并不需要有名称,因为它就代表这个模块自身。
你也能在 export default 后面放置一个标识符,以指定默认的导出,正如:

将标识符作为默认导出来指定的第三种方式,是使用重命名语法,如下:

六、导入默认值

使用如下语法来从一个模块中导入默认值:

注意此处并未使用花括号,与之前在非默认的导入中看到的不同。

对于既导出了默认值、又导出了一个或更多非默认的绑定的模块,你可以使用单个语句来导入它的所有导出绑定

逗号将默认的本地名称与非默认的名称分隔开,后者仍旧被花括号所包裹。要记住在 import语句中默认名称必须位于非默认名称之前。

如同导出默认值,你也能使用重命名语法进行默认值的导入:

七、绑定的再导出

也许有时你会想将当前模块已导入的内容重新再导出(例如,假设要用几个小模块来创建一个库)

 若你想将来自另一个模块的所有值完全导出,可以使用星号( * )模式:

使用完全导出,就可以导出目标模块的默认值及其所有具名导出,但这可能影响你从当前模块所能导出的值。例如,假设 example.js 具有一个默认导出,当你使用这种语法时,你就无法为当前模块另外再定义一个默认导出。

 

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值