有人可以向我解釋下面的代碼中發生了什麼。該功能正在接收n
作爲參數,那麼m
從哪裏來?整個代碼很混亂..如果有人能解釋?高階javascript函數
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true
有人可以向我解釋下面的代碼中發生了什麼。該功能正在接收n
作爲參數,那麼m
從哪裏來?整個代碼很混亂..如果有人能解釋?高階javascript函數
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true
這是一種功能性編程技術,被稱爲currying。 (也與partial function appliction相關)
大於>
通常需要2個參數(一個在左邊,一個在右邊)。這是一種一次餵食一種的方法。
這可能是更容易地看到發生了什麼,如果你在線叫它:
greaterThan(10)(11);
正如你可以從上面的例子看到,10
被傳遞中的n
參數,然後11
被傳遞爲m
參數。
該經過10
第一應用輸出一個函數,如下所示:
function(m) { return m > 10; };
這是在部分應用程序中的第一應用。
從那裏可以很容易地看到11
是如何通過以獲得最終結果的。
因此,要打破它:
function greaterThan(n) {
return function(m) { return m > n; };
}
//var greaterThan10 = greaterThan(10); -- is equivalent to:
var greaterThan10 = function(m) { return m > 10; };
console.log(greaterThan10(11)); //--> true
m
是11
,第二呼叫期間傳遞英寸
當你調用greaterThan(10)
,它返回一個新的功能,看起來像:
function(m) {
return m > 10;
}
,然後將其保存爲greaterThan10
。這被稱爲currying。
你有兩個功能在那裏。
n
來自第一個函數被調用時。
m
來自第二個函數(它是第一個函數的返回值)被調用時。
greaterThan10 = greaterThan(10);
// ^^ n
greaterThan10(11))
// ^^ returned function
// ^^ m
謝謝!!!!!!! – whatever
greaterThan
是返回另一個函數作爲結果函數,m
就是一個paraterer返回的函數。因此,在你的代碼: var greaterThan10 = function(m) { return m > 10; };
和 console.log(greaterThan10(11));
相同console.log(11 > 10);
謝謝!這是一個真正的幫助.. – whatever
當你調用函數greaterThan
它返回另一個功能,但不是一個數字浮動。內部函數知道n
,因爲它內部函數greaterThan
。
由於包裝函數返回另一個功能,你可以這樣調用
var result = greaterThan(10)(11);
第一個參數10
將用於包裝的功能,但結果第二個是功能,讓您可以立即傳遞參數的內部函數。 這是可能的,只有你有return function(){...}
你可以嘗試像
var a = function (x){
return function(y){
return function(z){
return x*y*z;
}
}
}
var result = a(5)(3)(8);
由於現在很清楚.. – whatever