簡體   English   中英

為什么要將IIFE分配給變量?

[英]Why assign an IIFE to a variable?

我一直在JavaScriptAngularJS使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM