這裏的示例代碼,我掙扎:如何理解返回函數的函數?
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));
有沒有把它在數學方面或按照流量或什麼辦法? 我不知道爲什麼10是x而9是y。
這裏的示例代碼,我掙扎:如何理解返回函數的函數?
function greaterThan(x) {
return function(y) {
return y > x;
};
}
var greaterThanTen = greaterThan(10);
show(greaterThanTen(9));
有沒有把它在數學方面或按照流量或什麼辦法? 我不知道爲什麼10是x而9是y。
在行:
var greaterThanTen = greaterThan(10);
您assinging變量x的值10,然後您存儲功能的greaterThanTen變量稍後調用。這意味着:
greaterThanTen = function(y) {
return y > 10;
};
所以,當你這樣做:
greaterThanTen(9); #y = 9
要調用:
return 9 > 10;
您確定它意味着'greaterThanTen = function(y)...'而不是'greaterThanTen(10)= function(y)...'? –
啊哈。顯然你沒有。涼。 –
@ Wolfpack'08是的,他的確如此。 'var greaterThanTen'被賦予調用'greaterThan(10)'的(函數)結果。 – Alnitak
的greaterThanTen
變量表示的函數帶一個參數,並返回一個布爾值,這是否參數大於10.
此功能不是一個函數調用,它返回函數。
此代碼創建一個新的一元函數,其中原二進制(大於)運算符的右側操作數是預結合爲特定值。
在lambda calculus這個綁定被稱爲currying。
在Javascript中發生綁定的原因是greaterThan
中參數x
的參數值永久保留在返回的內部函數(或「閉包」)的範圍內。
所以,當你撥打:
var greaterThanTen = greaterThan(10);
你現在有一個新的功能(命名爲greaterThanTen
),它總是其單個參數進行比較的10
綁定值因此:
greaterThanTen(9);
將返回false
。
很酷。儘管如此,在我能夠與你談談之前,我必須閱讀有關柯立克的工作原理。 –
任何人都可以告訴我在'(X→Y)→Z'中有'→'的意思嗎? –
有趣。感謝編輯。好的資源。我沒有看到10是如何舉行的,但知道它是......很有意思。是否僅僅因爲環境而舉行? –
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
,這是錯誤的。
該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)
合十
的然而,讓我感到困惑的是,當10被認爲是新價值時,9被持有。 –
圖片更容易:如果您習慣像我這樣的小流量機器來描繪功能,只需要一臺小流量機器返回另一臺小流量機器:http://i.imgur.com/aiHSH.jpg 我在y> x時切換了x和y,但你希望得到這個想法:) – abcde123483
可能重複的[如何做JavaScript閉包工作?](http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) –
不,這是**不** ** _如何關閉work_,這是關於lambda微積分和currying 。 – Alnitak
日本咖喱或印度咖喱? –