高阶函数如何理解通过函数参数进行nod馈送的变量



我正在努力理解JavaScript中高阶函数的机制。

我从雄辩的JavaScript中读到的例子如下。

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不是由其函数传递的参数,但是稍后将以更高的顺序传递">

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

您的代码注释如下:

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,它需要两个输入才能返回结果:

  • m,当您进一步调用greaterThan(10)返回的函数时解析
  • CCD_ 5,其是对CCD_。由于JavaScript的关闭机制,它可以保持活动(而不是被垃圾收集器破坏(

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){

return m=>m>n; 

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

}

const greaterThan10=greaterThan(10);

//返回的fn引用将被分配给greaterThan10//greaterThan10=m=>m>11

console.log(greaterThan10(11));

//这里u通过11作为箭头fn的参数,u返回

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