gpt4 book ai didi

javascript - 在 Javascript 中导入模块未明确导出的内容

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:43:11 25 4
gpt4 key购买 nike

在 Javascript 中,是否有任何方法可以从该模块导入(或要求)不是由模块导出的对象?

我知道这可能是不好的做法,但我想知道这是否可能。我有 Python 背景,所以我对我可以导入模块但无法在 Javascript 中访问其所有数据元素的想法感到困惑。

最佳答案

不使用模块 API。一个模块导出一个对象,任何导入该模块的代码都会被赋予对该对象的引用(JS 意义上的“引用”)。

15.2.3 of the spec涵盖了导出,并且非常详细地显示了 export 关键字用于在模块的导入/导出表中包含一些局部变量。很简单,如果您不指定 export,则该变量在模块范围内是本地的。

这与遗留 IIFE 模块的行为相匹配,后者使用函数作用域隐藏其局部变量,然后导出一个对象以公开。

一个 ES6 模块,例如:

export class Foo {
...
}

export const bar = new Foo();

转译后看起来像这样:

(function () {
function Foo() {
...
}
var bar = new Foo();
return {
Foo: Foo,
bar: bar
};
})();

大多数关于 JS 模块的文章(甚至是 the fantastic 2ality module writeup)都没有提到未导出的变量会发生什么。

为了比较,the CommonJS module standard指出模块有一个变量 exports 并且“模块可以在执行时添加它的 API”。 CommonJS 标准是我迄今为止找到的唯一引用,通过关键字/对象导出(来自模块上下文 2.1):

modules must use the "exports" object as the only means of exporting.

关于javascript - 在 Javascript 中导入模块未明确导出的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36264442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com