学习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
答案 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();
...此时您将回到第一个例子。