[英]Javascript function within return statement
我從javascript開始新的學習,並且還在學習。 我遇到了帶有不同函數聲明的這段代碼。 funcA
, funcB
和funcX
什么funcX
? 在代碼funcA
, funcB
在模塊內使用, funcX
和funcY
在模塊外部作為someModule.funcX()
調用。 可能非常簡單,但我不知道進行什至是什么rearch。 任何指針將不勝感激。
var someModule = (function() {
var funcA = (function() {...})();
var funcB = function() {...};
return {
funcX: function(){...},
funcY: function(){...}
};
})();
如果您只是想要所有功能之間的差異,這里就是差異。
funcA
, funcB
和funcX
, funcY
之間的第一個區別。
無論我們有內部return
聲明將是訪問someModule
。 所以我們可以在下面做這兩個
someModule.funcX();
someModule.funcY();
但是我們不能執行someModule.funcA() or someModule.funcB()
。 要了解為什么可以這樣做,就是要了解()
行為。 放在括號內的任何表達式都將執行,並在此返回結果。 因此,在此示例中,我們在這些括號內放置了一個function
,因此將在內存中創建一個匿名函數,並將在此處返回其對象。
現在,在函數聲明之后,我們又放了一對括號。 因此,這里發生的是(returned function object)()
。 因此,將立即調用此函數,並且將返回包含兩個屬性funcX
和funcY
其值為函數)的對象。
現在轉到函數內部的第二部分。 這里的區別funcA
和funcB
是, funcA
是相同someModule
即它也是一個IIFE並根據身體funcA
,它會決定,如果我們從身體內部返回函數對象funcA
,那么它也將是一個函數,否則它將包含我們從funcA
體內返回的funcA
。
除此之外,其他所有功能都很簡單。
另外,與要求的內容無關。 我們可以訪問funcA
和funcB
內funcX
和funcY
,並執行然后我們也仍然能夠訪問這些功能都包含連功能之后。 有關此行為的更多詳細信息,請查找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.