高阶javascript函数
有人能给我解释一下下面的代码是怎么回事吗。函数正在接收高阶javascript函数,javascript,anonymous-function,higher-order-functions,Javascript,Anonymous Function,Higher Order Functions,有人能给我解释一下下面的代码是怎么回事吗。函数正在接收n作为参数,那么m从哪里来?整个代码令人困惑。。如果有人能解释 function greaterThan(n) { return function(m) { return m > n; }; } var greaterThan10 = greaterThan(10); console.log(greaterThan10(11)); // → true m是11,在第二次调用期间传入 当您调用大于(10)的
n
作为参数,那么m
从哪里来?整个代码令人困惑。。如果有人能解释
function greaterThan(n) {
return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true
m
是11
,在第二次调用期间传入
当您调用大于(10)的时,它将返回一个新函数,如下所示:
function(m) {
return m > 10;
}
然后将其保存为大于10
。这被称为。这展示了一种称为的函数式编程技术。(也与之相关)
大于
通常需要两个参数(一个在左边,一个在右边)。这是一种一次喂一只的方法
如果将其称为“内联”,可能更容易看到发生了什么:
greaterThan(10)(11);
从上面的示例中可以看到,n
参数传入10
,然后m
参数传入11
通过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
来自调用第一个函数时
greaterThan10 = greaterThan(10);
// ^^ n
greaterThan10(11))
// ^^ returned function
// ^^ m
m
来自调用第二个函数(第一个函数的返回值)时
greaterThan10 = greaterThan(10);
// ^^ n
greaterThan10(11))
// ^^ returned function
// ^^ m
greaterThan
是一个返回另一个函数的函数,m
是该返回函数的paraterer。因此,在您的代码中:
var greaterThan10=函数(m){返回m>10;}代码>
及
console.log(大于10(11))
与console.log相同(11>10)代码>当您调用大于
的函数时,它返回另一个函数,但不返回浮点数。内部函数知道n
,因为它在函数内部比大
因为包装器函数返回另一个函数,所以可以像这样调用第二个函数
var result = greaterThan(10)(11);
第一个参数10
将用于包装函数,但结果是函数,所以您可以立即传递内部函数的参数。
只有当您有返回函数(){…}
你可以试试类似的东西
var a = function (x){
return function(y){
return function(z){
return x*y*z;
}
}
}
var result = a(5)(3)(8);