首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >进出口名称冲突解决方案

进出口名称冲突解决方案
EN

Stack Overflow用户
提问于 2021-03-08 16:17:15
回答 1查看 445关注 0票数 3

在Node中测试以下模块布局,看起来本地导出的定义总是在名称冲突的情况下替换外部导出的定义(参见f1 in B.js)。

A.js

代码语言:javascript
代码运行次数:0
运行
复制
export const f1 = 'A'

B.js

代码语言:javascript
代码运行次数:0
运行
复制
export * from './A.js'
export const f1 = 'B'

C.js

代码语言:javascript
代码运行次数:0
运行
复制
import * as A from './A.js'
import * as B from './B.js'
console.log(A.f1)
console.log(B.f1)
代码语言:javascript
代码运行次数:0
运行
复制
> node C.js
// A
// B

这是规矩吗?我还没有在Ecmascript规范中找到一些关于如何管理这个的东西。

进出口订单重要吗?

您认为这是扩展模块重载函数和/或添加新函数的可靠方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-08 16:33:35

这是规矩吗?我还没有在Ecmascript规范中找到一些关于如何管理这个的东西。

是的,本地出口优先。实际上,这就是规范规范

  1. 对于模块中的每个ExportEntry记录e。[LocalExportEntries],请执行 a. 断言:模块为此导出提供直接绑定。 b.将e.[ExportName]附加到exportedNames。
  2. 对于模块中的每个ExportEntry记录e。[IndirectExportEntries],请执行 a. 断言:模块导入此导出的特定绑定。 b.将e.[ExportName]附加到exportedNames。

具体来说,在您的示例中,starExport是以下内容的一部分:

代码语言:javascript
代码运行次数:0
运行
复制
For each ExportEntry Record e in module.[[StarExportEntries]], do
    (...)
    c. Let starNames be requestedModule.GetExportedNames(exportStarSet).
    d. For each element n of starNames, do
        i. If SameValue(n, "default") is false, then
            1. If n is not an element of exportedNames, then
                a. Append n to exportedNames.

所以,回答你的第二个问题:

您认为这是扩展模块重载函数和/或添加新函数的可靠方法吗?

是的,它是可靠的,因为它是在标准中指定的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66533367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档