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