簡體   English   中英

JavaScript閉包:返回函數

[英]JavaScript Closure: Returning a Function

我正在通過Douglas Crockford編寫的JavaScript講座系列進行工作。 我為他展示的“封閉”示例代碼感到困惑:

 var digit_name = (function () { var names = ['zero', 'one', 'two', 'three']; return function (n) { return names[n]; }; }()); alert(digit_name(3)); 

當定義中未指定任何參數時(最外面的功能), digit_name如何接受參數? 參數(在這種情況下為3 )如何在調用過程中知道與內部函數定義中的n對應?

digit_name存儲由外部函數return的內部函數,該函數是立即執行的函數表達式 ,其中內部函數具有帶有一個參數的簽名,並且該函數存儲在digit_name

function (n) {
  return names[n];
}

最終,以上將是digit_name ,並且names是一個私有變量,該私有變量與digit_name的環境捆綁在一起。 私有變量的概念僅可使用閉包來實現。

為了清楚起見,請參見以下內容:

在此處輸入圖片說明

有一個自調用的匿名函數(function(){})()。 所以digit_name不是函數,函數輸出的是return語句,所以這發生在瀏覽器內部:

var digit_name=(function(){})();
var digit_name=function(n){}

外部函數是IIFE,即立即調用的函數表達式。 該函數在腳本啟動時運行,因此IIFE返回的內部函數就是分配給digit_name的函數。

閉包的“魔力”,如果此內部函數仍然可以訪問閉包中的所有內容(例如names數組)。

https://developer.mozilla.org/en-US/docs/Glossary/IIFE

暫無
暫無

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

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