繁体   English   中英

这个“高阶函数”在Javascript中是如何工作的

[英]How does this “higher-order functions” thing works in Javascript

在Marijn Haverbeke的《 Eloquent Javascript 》一书中,有一个示例介绍了高阶函数的概念:

function greaterThan(n) {
  return function(m) { return m > n; };
}
var greaterThan10 = greaterThan(10);
console.log(greaterThan10(11));
// → true

我不太确定这是如何工作的……可能回答了我自己的问题,但这是我的看法:

  • 首先,在此行中调用greaterThan(n) ,并将其值分配给greaterThan10变量:

     var greaterThan10 = greaterThan(10); 
  • 这使得存储为greaterThan10的函数如下所示:

     function greaterThan(10) { return function(m) { return m > 10; }; } 
  • 然后,当您调用greaterThan10(11)您正在调用上面的函数,该函数转换为:

     function greaterThan(10) { return function(11) { return 11 > 10; }; } 

    因此,将结果作为11 > 10返回True确实是正确的。

有人可以确认我是否正确吗? 另外,如果有人可以提供有关此高阶函数如何在JavaScript中工作的更多详细信息和评论,将不胜感激。

从某种程度来说,您是正确的,但是对它的评估略有不同。

var greaterThan10 = greaterThan(10);

这行代码不会使存储为greaterThan10的函数“看起来像”任何东西-它创建了一个新函数,将变量n传递给它,以便greaterThan10变成了一个看起来像

var greaterThan10 = function(m) { return m > 10; };

当您调用它时,您将直接调用此函数,而不再使用原始函数了。

在阅读示例时,我也感到困惑,但后来得出如下结论:

在第3章:函数中,已经说明了如何使用箭头符号( => )声明函数。 箭头符号位于参数列表的后面,如果只有一个参数,则可以在参数列表周围省略括号。 因此, m是参数而不是函数名称。

因此,在第一次调用greaterThan(10)greaterThan10本质上成为

var greaterThan10 = function (m) { return m > 10; }

在第二个调用greaterThan10(11) ,它变为

function (11) { return 11 > 10; }

11> 10,则返回true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM