高阶 javascript 函数
Higher order javascript functions
谁能给我解释一下下面的代码是怎么回事。该函数正在接收 n
作为参数,那么 m
来自哪里?整个代码令人困惑..如果有人可以解释一下?
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true
m
是 11
,在第二次调用时传入。
当您调用 greaterThan(10)
时,它 returns 一个新函数,如下所示:
function(m) {
return m > 10;
}
然后保存为 greaterThan10
。这叫做currying.
这展示了一种称为 currying. (related also to 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
那里有两个函数。
n
来自调用第一个函数的时候。
m
来自调用第二个函数(即第一个函数的return值)。
greaterThan10 = greaterThan(10);
// ^^ n
greaterThan10(11))
// ^^ returned function
// ^^ m
greaterThan
是 returns 另一个函数的结果,m
是该返回函数的参数。所以在你的代码中:
var greaterThan10 = function(m) { return m > 10; };
和
console.log(greaterThan10(11));
等同于 console.log(11 > 10);
当您调用函数 greaterThan
时,它 returns 是另一个函数,但不是浮点数。内部函数知道 n
因为它在函数 greaterThan
.
内部
因为包装函数 returns 另一个函数你可以这样调用第二个函数
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);
谁能给我解释一下下面的代码是怎么回事。该函数正在接收 n
作为参数,那么 m
来自哪里?整个代码令人困惑..如果有人可以解释一下?
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true
m
是 11
,在第二次调用时传入。
当您调用 greaterThan(10)
时,它 returns 一个新函数,如下所示:
function(m) {
return m > 10;
}
然后保存为 greaterThan10
。这叫做currying.
这展示了一种称为 currying. (related also to 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
那里有两个函数。
n
来自调用第一个函数的时候。
m
来自调用第二个函数(即第一个函数的return值)。
greaterThan10 = greaterThan(10);
// ^^ n
greaterThan10(11))
// ^^ returned function
// ^^ m
greaterThan
是 returns 另一个函数的结果,m
是该返回函数的参数。所以在你的代码中:
var greaterThan10 = function(m) { return m > 10; };
和
console.log(greaterThan10(11));
等同于 console.log(11 > 10);
当您调用函数 greaterThan
时,它 returns 是另一个函数,但不是浮点数。内部函数知道 n
因为它在函数 greaterThan
.
因为包装函数 returns 另一个函数你可以这样调用第二个函数
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);