[英]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.