JS封装 - IIFE与常规功能

时间:2018-04-11 13:46:36

标签: javascript encapsulation

学习JS Module Pattern

我试图找出这个用例中IIFE和常规函数之间的差异。看起来IIFE的唯一优势是我的模块成为一个对象(因为IIFE立即返回)所以我不需要在我的模块上使用调用调用/ 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

1 个答案:

答案 0 :(得分:2)

唯一的区别在于你执行你的功能。在第二个示例中,如果您想要调用其他方法(或多次调用privateMethod),则必须再次执行 (不理想):

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

...或者记住第一次执行的结果是一个dreuse it:

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

...此时您将回到第一个例子。