"higher-order functions" 这个东西在 Javascript 中是如何工作的
How does this "higher-order functions" thing works in Javascript
来自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 中工作的更多详细信息和评论,我们将不胜感激。
你是对的,从理解的层面上来说,但它的评估略有不同。
var greaterThan10 = greaterThan(10);
此行不会将函数存储为 greaterThan10
"look like" 任何东西 - 它创建了一个新函数,将变量 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,returns 正确。
来自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 中工作的更多详细信息和评论,我们将不胜感激。
你是对的,从理解的层面上来说,但它的评估略有不同。
var greaterThan10 = greaterThan(10);
此行不会将函数存储为 greaterThan10
"look like" 任何东西 - 它创建了一个新函数,将变量 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,returns 正确。