2011-10-08 36 views
2

這裏的示例代碼,我掙扎:如何理解返回函數的函數?

function greaterThan(x) { 
    return function(y) { 
    return y > x; 
    }; 
} 

var greaterThanTen = greaterThan(10); 
show(greaterThanTen(9)); 

有沒有把它在數學方面或按照流量或什麼辦法? 我不知道爲什麼10是x而9是y。

+0

可能重複的[如何做JavaScript閉包工作?](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) –

+0

不,這是**不** ** _如何關閉work_,這是關於lambda微積分和currying 。 – Alnitak

+0

日本咖喱或印度咖喱? –

回答

4

在行:

var greaterThanTen = greaterThan(10); 

您assinging變量x的值10,然後您存儲功能的greaterThanTen變量稍後調用。這意味着:

greaterThanTen = function(y) { 
    return y > 10; 
}; 

所以,當你這樣做:

greaterThanTen(9); #y = 9 

要調用:

return 9 > 10; 
+0

您確定它意味着'greaterThanTen = function(y)...'而不是'greaterThanTen(10)= function(y)...'? –

+0

啊哈。顯然你沒有。涼。 –

+1

@ Wolfpack'08是的,他的確如此。 'var greaterThanTen'被賦予調用'greaterThan(10)'的(函數)結果。 – Alnitak

0

greaterThanTen變量表示的函數帶一個參數,並返回一個布爾值,這是否參數大於10.

4

此功能不是一個函數調用,它返回函數。

此代碼創建一個新的一元函數,其中原二進制(大於)運算符的右側操作數是預結合爲特定值。

lambda calculus這個綁定被稱爲currying

在Javascript中發生綁定的原因是greaterThan中參數x的參數值永久保留在返回的內部函數(或「閉包」)的範圍內。

所以,當你撥打:

var greaterThanTen = greaterThan(10); 

你現在有一個新的功能(命名爲greaterThanTen),它總是單個參數進行比較的10

綁定值因此:

greaterThanTen(9); 

將返回false

+0

很酷。儘管如此,在我能夠與你談談之前,我必須閱讀有關柯立克的工作原理。 –

+0

任何人都可以告訴我在'(X→Y)→Z'中有'→'的意思嗎? –

+0

有趣。感謝編輯。好的資源。我沒有看到10是如何舉行的,但知道它是......很有意思。是否僅僅因爲環境而舉行? –

2
  • 創建greaterThan(10)
  • 創建功能:
    function(y){return y > x}
  • 返回功能。

所以,當你調用greaterThan(10),該函數返回其局部變量x設置爲10

var greaterThanTen = greaterThan(10)等於功能:
var greaterThanTen = function(y){return y > 10};

要完成,greaterThanTen(9)被調用,它等於9 > 10,這是錯誤的。

+0

你有你的比較錯誤的方法 – Alnitak

+0

謝謝。比較是好的,我不小心換了X和Y. –

+0

是的,錯誤的方式。而且9不是大於10 ;-) – Alnitak

2

GREATERTHAN所做的唯一事情是設置爲X的值在

函數(y)的{返回(Y> X);}

並存儲得到函數中的一個變量名,在這種情況下,大於等於,現在與內容

函數(y)的{返回(Y> 10);}

調用greaterThanTen(9)相同看着

函數(Y = 9){返回(Y > 10);}

其是相同

函數(Y = 9){返回(9> 10);}

這是錯誤的。因此錯誤被返回。

編輯:

的函數,返回這裏的函數實施例:http://i.imgur.com/aiHSH.jpg(x和y是在y中圍繞切換> X)

合十

+0

然而,讓我感到困惑的是,當10被認爲是新價值時,9被持有。 –

+1

圖片更容易:如果您習慣像我這樣的小流量機器來描繪功能,只需要一臺小流量機器返回另一臺小流量機器:http://i.imgur.com/aiHSH.jpg 我在y> x時切換了x和y,但你希望得到這個想法:) – abcde123483