我试图理解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不是它的函数传递的参数,但是它将在稍后以更高的顺序传递。”
它是如何为高阶函数做好准备的?为什么我的试验(第二种方法)不起作用?
发布于 2021-05-15 21:03:11
您的代码注释如下:
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)返回的函数时解析。n,它是对greaterThan参数的引用。由于JavaScript的闭锁机制,它保持存活(而不是被垃圾收集器销毁)发布于 2021-05-15 21:02:00
在这种情况下,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;
}发布于 2021-05-15 21:10:00
function greaterThan(n){
return m=>m>n; //这里,你实际上是返回一个以m作为参数的箭头fn。
}
const greaterThan10=greaterThan(10);//返回的fn引用将分配给greaterThan10 // greaterThan10 =m => m>11
console.log(greaterThan10(11));//在这里,你作为一个参数传递11到箭头fn,而fn是你返回的
在发送参数m之前,您正在尝试记录m。
https://stackoverflow.com/questions/67551113
复制相似问题