我正在努力理解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