有人可以向我解释下面的代码中发生了什么。该功能正在接收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