高阶 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

m11,在第二次调用时传入。

当您调用 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);