Marijn Haverbeke撰写的 Eloquent Javascript 一书中,在介绍高阶函数的概念时有this example:
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; };
}
因此返回True
作为11 > 10
的结果确实如此。
有人可以确认我是否正确吗?此外,如果有人可以提供有关此高阶函数如何在JavaScript中工作的更多详细信息和注释,那将非常感激。
答案 0 :(得分:3)
从理解的角度来看,你是对的,但它的评价略有不同。
var greaterThan10 = greaterThan(10);
此行不会使存储为greaterThan10
的函数“看起来像”任何东西 - 它会创建一个新函数,将变量n
传递给它,以便greaterThan10
变为一个看起来像
var greaterThan10 = function(m) { return m > 10; };
当你调用它时,你直接调用这个函数,而不再完全执行原始函数。
答案 1 :(得分:0)
我在阅读这个例子时也感到困惑,但后来得出如下结论:
在第3章:函数中,已经解释了如何使用箭头符号(=>
)声明函数。箭头符号位于参数列表之后,如果只有一个参数,则可以在参数列表周围省略括号。因此,m
是参数而不是函数名称。
因此,在第一次调用greaterThan(10)
后,greaterThan10
基本上变为
var greaterThan10 = function (m) { return m > 10; }
第二次通话greaterThan10(11)
后,它变为
function (11) { return 11 > 10; }
11> 10,返回true。