簡體   English   中英

return語句中的Javascript函數

[英]Javascript function within return statement

我從javascript開始新的學習,並且還在學習。 我遇到了帶有不同函數聲明的這段代碼。 funcAfuncBfuncX什么funcX 在代碼funcAfuncB在模塊內使用, funcXfuncY在模塊外部作為someModule.funcX()調用。 可能非常簡單,但我不知道進行什至是什么rearch。 任何指針將不勝感激。

var someModule = (function() {
    var funcA = (function() {...})();
    var funcB = function() {...};

    return {
        funcX: function(){...},
        funcY: function(){...}
    };
})();

如果您只是想要所有功能之間的差異,這里就是差異。

funcAfuncBfuncXfuncY之間的第一個區別。

無論我們有內部return聲明將是訪問someModule 所以我們可以在下面做這兩個

someModule.funcX();
someModule.funcY();

但是我們不能執行someModule.funcA() or someModule.funcB() 要了解為什么可以這樣做,就是要了解()行為。 放在括號內的任何表達式都將執行,並在此返回結果。 因此,在此示例中,我們在這些括號內放置了一個function ,因此將在內存中創建一個匿名函數,並將在此處返回其對象。

現在,在函數聲明之后,我們又放了一對括號。 因此,這里發生的是(returned function object)() 因此,將立即調用此函數,並且將返回包含兩個屬性funcXfuncY其值為函數)的對象。

現在轉到函數內部的第二部分。 這里的區別funcAfuncB是, funcA是相同someModule即它也是一個IIFE並根據身體funcA ,它會決定,如果我們從身體內部返回函數對象funcA ,那么它也將是一個函數,否則它將包含我們從funcA體內返回的funcA

除此之外,其他所有功能都很簡單。

另外,與要求的內容無關。 我們可以訪問funcAfuncBfuncXfuncY ,並執行然后我們也仍然能夠訪問這些功能都包含連功能之后。 有關此行為的更多詳細信息,請查找JavaScript中的閉包。 快樂學習JavaScript。 :)

這只是一個模塊模式。 編寫方式與顯示模塊模式非常相似。

基本上,該函數返回的東西(實際上是任何東西)實際上是模塊的公共接口(請注意,通過接口我並不意味着需要實現該接口,僅是這是與模塊進行交互的端點,例如API)。

做到這一點的經典方法(作為顯示模塊模式)實際上是:

var someModule = (function() {
    var funcA = (function() {...})();
    var funcB = function() {...};
    var funcX = function(){...}
    var funcY = function(){..}
    return {
        funcX: funcX,
        funcY: funcY
    };
})();

之所以稱為顯示模塊模式,是因為您定義了模塊以及該模塊中的所有私有和公共功能,最后您還揭示了要公開的內容。

這樣可以輕松了解內部發生的情況,並在必要時進行更改。

該站點是快速了解各種模塊模式的好資源

安德魯,

因此,這有點令人困惑,但這是非常基本的javascript怪異。

您可以將函數保存在這樣的變量中:

var a = function(){return 30}

這里a函數本身。 然后,您可以使用()調用此函數:

a() // result is 30;

或者,我可以忘記變量,而只需在末尾添加()來調用函數:

(function(){return 30})();

盡管我們沒有將其分配給任何對象,但這也導致了30。

現在,如果我將最后一個賦值給變量:

var b = (function(){return 30})();

不像a上面,它擁有本身的功能,B保存結果,不管這可能是中,調用函數- b為30,因為函數被調用, 然后將結果分配給b。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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