JS 封装——IIFE vs 常规函数

JS Encapsulation - IIFE vs Regular Function

学习 JS Module Pattern

我试图弄清楚这个用例中 IIFE 和常规函数之间的区别。看起来 IIFE 的唯一优势是我的模块变成了一个对象(因为 IIFE returns 立即)所以我不需要在我的上使用 call invocation/param () 语法模块。

有什么额外的好处吗?考虑以下代码:

//IIFE
var HelloWorldEncapsulated = (function(){
  return {
    privateMethodEncapsulated: function () {
      console.log('ayy lmao encapsulated');
    } 
  }
})();

HelloWorldEncapsulated.privateMethodEncapsulated();

//Just a function
var HelloWorld= function(){
  return {
    privateMethod: function () {
      console.log('ayy lmao');
    } 
  }
};

HelloWorld().privateMethod();

再问一下,这两者除了用()和不用()还有什么区别吗?看起来 privateMethod 在非 IIFE 函数中的隐藏程度与在 IIFE 中的隐藏程度一样。 Code here in case you don't want to type 2 words

唯一的区别在于你执行函数的时间。在你的第二个例子中,如果你想调用另一个方法(或多次调用 privateMethod ),你必须再次执行它 (不理想):

HelloWorld().privateMethod();
HelloWorld().privateMethod(); // Calls HelloWorld a second time, creating a
                              // whole new object to make the call on (bad idea)

...或者记住第一次执行的结果并重新使用它:

var hw = HelloWorld();
hw.privateMethod();
hw.privateMethod();

...此时您回到了第一个示例。