[英]Why assign an IIFE to a variable?
我一直在JavaScript
和AngularJS
使用IIFE,並且一直在使用以下結構:
方法1:
//IIFE Immediately Invoked Function Expression
(function () {
}());
但是,我已經看到以下經常將變量分配給IIFE
方法2:
//IIFE Immediately Invoked Function Expression assigned to doStuff variable
var doStuff = (function () {
}());
注意:這個問題不是關於這種模式是什么或IIFE是什么。 這與具體說明為什么人們會在IIFE上使用返回變量及其與Angular實踐的關系。
在Angular方法1中工作正常,但在我看到的許多原始JS示例中,使用了方法2。 我的假設是doStuff
中的任何東西都可以通過它來實現並且可以調用。 但是,我不是100%肯定2種方法的確切推理或區別,需要一些幫助才能理解何時使用不同的方法?
方法#2的原因是你會在IIFE中找到返回某些東西的代碼(通常但不一定是對象或函數)。 IIFE返回的是最終被分配的內容。 例如:
//IIFE Immediately Invoked Function Expression assigned to doStuff variable
var doStuff = (function () {
var privateInformationForDoStuff = 0;
function doStuff() {
console.log(++privateInformationForDoStuff);
}
return doStuff;
}());
在那里,變量最終成為對函數的引用,每次調用它時,都會給我們一個比前一次更高的數字。 IIFE確保沒有任何東西可以修改privateInformationForDoStuff
變量,它完全是doStuff
函數的私有變量。
這種情況的常見用途是創建具有各種功能的對象,有時稱為模塊,這些對象也可能具有僅在“模塊”內共享的私有信息:
var MyApp = (function() {
var privateModuleInformation;
var morePrivateModuleInformation;
// ...
function doThis() {
// ...
}
function doThat() {
// ...
}
function doTheOther() {
// ...
}
return {
doThis: doThis,
doThat: doThat,
doTheOther: doTheOther
};
})();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.