这是怎么回事;“高阶函数”;这东西在Javascript中工作

这是怎么回事;“高阶函数”;这东西在Javascript中工作,javascript,higher-order-functions,confirmation,Javascript,Higher Order Functions,Confirmation,从Marijn Haverbeke的《雄辩的Javascript》一书中可以看出,在介绍高阶函数的概念时: function greaterThan(n) { return function(m) { return m > n; }; } var greaterThan10 = greaterThan(10); console.log(greaterThan10(11)); // → true 我不太清楚这是怎么回事。。。可能回答了我自己的问题,但我是这么看的: 首先,在此行中调用

从Marijn Haverbeke的《雄辩的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);
    
  • 这使得存储为
    大于10的函数看起来像:

    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
的函数“看起来像”任何东西-它创建一个新函数,将变量
n
传递给它,使
greaterThan10
成为一个看起来像

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

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

从理解的角度来看,您是正确的,但它的计算方式略有不同

var greaterThan10 = greaterThan(10);
此行不会使存储为
greaterThan10
的函数“看起来像”任何东西-它创建一个新函数,将变量
n
传递给它,使
greaterThan10
成为一个看起来像

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

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

从理解的角度来看,您是正确的,但它的计算方式略有不同

var greaterThan10 = greaterThan(10);
此行不会使存储为
greaterThan10
的函数“看起来像”任何东西-它创建一个新函数,将变量
n
传递给它,使
greaterThan10
成为一个看起来像

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

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

从理解的角度来看,您是正确的,但它的计算方式略有不同

var greaterThan10 = greaterThan(10);
此行不会使存储为
greaterThan10
的函数“看起来像”任何东西-它创建一个新函数,将变量
n
传递给它,使
greaterThan10
成为一个看起来像

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

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

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

在第3章:函数中,已经解释了如何使用箭头符号(
=>
)声明函数。箭头符号出现在参数列表之后,如果只有一个参数,则可以在参数列表周围加括号。因此,
m
是一个参数,而不是函数名

因此,在第一次调用
greaterThan(10)
之后,
greaterThan(10)
基本上变为

var greaterThan10 = function (m) { return m > 10; }
在第二次调用之后,
大于10(11)
,它变为

function (11) { return 11 > 10; }

11>10,返回true。

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

在第3章:函数中,已经解释了如何使用箭头符号(
=>
)声明函数。箭头符号出现在参数列表之后,如果只有一个参数,则可以在参数列表周围加括号。因此,
m
是一个参数,而不是函数名

因此,在第一次调用
greaterThan(10)
之后,
greaterThan(10)
基本上变为

var greaterThan10 = function (m) { return m > 10; }
在第二次调用之后,
大于10(11)
,它变为

function (11) { return 11 > 10; }

11>10,返回true。

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

在第3章:函数中,已经解释了如何使用箭头符号(
=>
)声明函数。箭头符号出现在参数列表之后,如果只有一个参数,则可以在参数列表周围加括号。因此,
m
是一个参数,而不是函数名

因此,在第一次调用
greaterThan(10)
之后,
greaterThan(10)
基本上变为

var greaterThan10 = function (m) { return m > 10; }
在第二次调用之后,
大于10(11)
,它变为

function (11) { return 11 > 10; }

11>10,返回true。

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

在第3章:函数中,已经解释了如何使用箭头符号(
=>
)声明函数。箭头符号出现在参数列表之后,如果只有一个参数,则可以在参数列表周围加括号。因此,
m
是一个参数,而不是函数名

因此,在第一次调用
greaterThan(10)
之后,
greaterThan(10)
基本上变为

var greaterThan10 = function (m) { return m > 10; }
在第二次调用之后,
大于10(11)
,它变为

function (11) { return 11 > 10; }

11>10,返回true。

Yes。。。在这里,
n
正在成为一个可变的是。。。在这里,
n
正在成为一个可变的是。。。在这里,
n
正在成为一个可变的是。。。这里
n
正在成为一个变量