javascript - 揭示模块模式结合 ES6 模块
问题描述
我不知道哪种方法更适合 ES6 模块和显示模块模式。来自 ES6 模块的数据/功能是否像 IIFE 一样私有?
我是否应该只使用 *only ES6 模块,如下所示:
// Export file
export const test = () => {
console.log('Hello from test');
}
// Import file
import { test } from "./test.js";
test();
或者我应该同时使用两者:
// Export file
export const revealingPattern = (function() {
function test() {
console.log('Hello from test');
}
return {
test
}
})();
// Import file
import { revealingPattern } from "./test.js";
revealingPattern.test();
解决方案
显示模块模式的主要目的是保持数据封装,但是 ES6 模块的顶层已经是私有的——其中定义的变量不会泄漏到全局范围(除非您明确地分配给全局对象,例如window.foo = 'foo'
)。
因此,在 ES6 模块中,揭示模块模式并没有任何意义——随意在顶层定义任何你想要的东西,它的范围将限定为模块(并且仅限于模块),然后你可以明确export
需要透露的任何内容(并且不会不受欢迎地透露其他任何内容)。
推荐阅读
- bash - 单击网页上的下载按钮并使用 shellnium 将文件保存在 bash 中
- sql-server - 从 2 个不同的表中查找计数
- flutter - 是否有一些方法可以增加在没有互联网且应用程序仍在运行时收到的通知数量
- batch-file - 通过批处理自动将文件发送到新文件夹
- java - 无法从核心模块类 LibGDX Android Studio 访问 Java 对象
- c++ - 从 3 小时时段延长至 N 天
- pyspark - 使数据框过滤器成为变量,以便我可以设置一次并重新使用
- php - 如何从附件页面 url 获取附件 ID?
- mongodb - 如何从 mongodb 的嵌套数组中的示例数据中查找选定的字段
- java - Selenium 版本 3.141.59 @FindBy 注释给出错误“无法解析为类型”