高阶函数如何理解通过函数参数点头提供的变量?

how do Higher Order function understand a variable which is nod fed through function argument?

我正在尝试了解 JavaScript 中高阶函数的机制。

我从eloquentJavaScript读到的例子如下

function greaterThan(n){
  
  return m=>m>n;
}

const greaterThan10=greaterThan(10);

console.log(greaterThan10(11));

我想知道JS如何自动识别未传递给函数的变量'm'作为高阶第二个变量。 我假设在高阶函数中定义的任何变量都是为高阶保留的。 然后我按照下面的方式对其进行了测试。

function greaterThan(n){
  console.log(m)
  return m=>m>n;
}

它抛出一个错误,这意味着我的假设是错误的。 JS 如何像第一个示例中那样在高阶函数中准备自己。 代码似乎准备好了说

" m 不是其函数传递的参数,但稍后将以更高的顺序传递。"

它是如何为高阶函数做准备的?为什么我的试用(第二种方法)不起作用?

m 在这种情况下是由 greaterThan.

返回的 lambda 函数的参数
function greaterThan(n) {
   // This is lambda function which uses n from the greaterThan function and has m as a parameter
   return (m) => m > n;
}


const greaterThan10 = greaterThan(10);

// This equals to this:
const greaterThan10 = (m) => m > 10;

// Which equals to this:
function greaterThan10(m) {
  return m > 10;
}

您的代码注释如下:

function greaterThan(n){
  console.log(m); // At this point the below function doesn't exist and has not been called yet
  return m => m > n; // You're returning a function here with a parameter named m;
}

当您调用 greaterThan(10) 时,您会得到一个 function,它需要两个输入才能 return 结果:

  • m 当您进一步调用由 greaterThan(10)
  • 编辑的函数 return 时解析
  • n 这是对 greaterThan 参数的引用。由于 JavaScript 的 closure 机制
  • ,它得以保持存活(未被垃圾收集器销毁)
function greaterThan(n){
  
  return m=>m>n; 

// 这里你实际上是返回一个箭头 fn 它将 m 作为参数

}


const greaterThan10=greaterThan(10);

// 返回的 fn 引用将被赋值给 greaterThan10 // 大于 10 = m => m>11

console.log(greaterThan10(11));

// 这里你将 11 作为参数传递给你返回的箭头 fn

你正在尝试在你发送参数 m 之前记录 m