2016-09-29 68 views
0

我正在閱讀eloquentjavascript來學習JavaScript,但這種封閉的事情讓我感到困惑。 warp1不是函數,但它看起來像函數,它看起來像參數。封閉函數如何工作?我們可以使用它的原因是什麼?不理解閉包函數是如何工作的?

function wrapValue(n) { 
    var localVariable = n; 

    return function() { return localVariable; }; 
} 

var wrap1 = wrapValue(1); 
var wrap2 = wrapValue(2); 

console.log(wrap1()); 
// → 1 

console.log(wrap2()); 
// → 2 

回答

0

外部函數(wrapValue)返回一個函數。所以返回的函數被賦值給你的變量wrap1wrap2。這就是爲什麼你可以從你的變量中調用返回的函數。

也許當我們看下面的內容時會更容易理解。

像你這樣你可以創建一個功能:

function foo() { return "foo"; } 

或者你可以指定一個函數的變量:

var foo = function() { return "foo"; } 

第二個例子基本上不完全一樣,你的封呢 - 它將一個函數賦值給一個變量。

在所有情況下,您可以通過變量或函數名稱調用函數

foo(); 

無論是。