首页 > 解决方案 > 揭示模块模式结合 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();

标签: javascriptecmascript-6modulees6-modulesrevealing-module-pattern

解决方案


显示模块模式的主要目的是保持数据封装,但是 ES6 模块的顶层已经是私有的——其中定义的变量不会泄漏到全局范围(除非您明确地分配给全局对象,例如window.foo = 'foo')。

因此,在 ES6 模块中,揭示模块模式并没有任何意义——随意在顶层定义任何你想要的东西,它的范围将限定为模块(并且仅限于模块),然后你可以明确export需要透露的任何内容(并且不会不受欢迎地透露其他任何内容)。


推荐阅读