揭示模块模式结合 ES6 模块

Gre*_*dev 2 javascript module revealing-module-pattern ecmascript-6 es6-modules

我不知道 ES6 模块和揭示模块模式哪种方法更好。ES6 模块的数据/功能是否与 IIFE 一样私密?

我应该只使用 *only ES6 模块,像这样:

// Export file

export const test = () => {
 console.log('Hello from test');
}

// Import file

import { test } from "./test.js";

test();
Run Code Online (Sandbox Code Playgroud)

或者我应该同时使用两者

// Export file

export const revealingPattern = (function() {
    function test() {
        console.log('Hello from test');
    }

    return {
        test
    }
})();

// Import file

import { revealingPattern } from "./test.js";
revealingPattern.test();
Run Code Online (Sandbox Code Playgroud)

Cer*_*nce 6

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

因此,在 ES6 模块中,揭示模块模式实际上没有任何意义 - 随意在顶层定义任何你想要的东西,它会被限定在模块(并且只有模块),然后你可以明确export需要披露的任何内容(并且没有其他不受欢迎的内容会被披露)。