2017-04-15 97 views
0

我最近開始自己學習JavaScript,並正在閱讀一本名爲「Eloquent JavaScript」的書。以下代碼是本書中的一個示例腳本,它使我困惑:通過變量調用函數

function greaterThan(n) { 
    return function(m) { return m > n; }; 
} 
var greaterThan10 = greaterThan(10); 
console.log(greaterThan10(11)); 

有人可以解釋最後兩行的邏輯嗎? greaterThan10是否包含真值或它是一個函數?

+0

'greaterThan10'是一個函數。 – Xufox

+2

[這個「高階函數」在Javascript中如何工作)的可能重複(http://stackoverflow.com/questions/31176240/how-does-this-higher-order-functions-thing-works-in- JavaScript的)。你可能只是谷歌搜索「更好的雄辯的JavaScript」。 – Xufox

回答

0

看起來就起初有點混淆,但請記住,函數是JavaScript中的對象

greaterThan(n)與定義返回一個匿名函數功能:

function(m) { return m > n; } 

因此,當我們調用greaterThan(10)我們希望它返回一個對象,它實際上是一個函數:

function(m) { return m > 10; } 

稍後,我們將該對象/函數分配給變量e,並且像調用任何函數那樣調用它。


總之,試想一下,我們有:

var greaterThan10 = function(m) { return m > 10; }; 
+0

感謝您的解釋!它現在是有道理的:D –

1

您在倒數第二行定義greaterThan10

var greaterThan10 = greaterThan(10); 

不管在這種情況下greaterThan函數返回是什麼greaterThan10將評估到。

第2行,我們看到greaterThan將返回下面的函數表達式:

function(m) { return m > n; } 

與值替換變量n後,您通過我們得到這樣的:

function(m) { return m > 10; }