首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高阶函数是如何通过函数参数来理解节点变量的?

高阶函数是如何通过函数参数来理解节点变量的?
EN

Stack Overflow用户
提问于 2021-05-15 20:50:33
回答 3查看 50关注 0票数 0

我试图理解JavaScript中高阶函数的机制。

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

代码语言:javascript
复制
function greaterThan(n){
  
  return m=>m>n;
}

const greaterThan10=greaterThan(10);

console.log(greaterThan10(11));

我想知道JS是如何自动识别变量'm‘的,这个变量没有以更高的顺序作为第二个变量传递给函数。我假设在高阶函数中定义的任何变量都是为高阶保留的。然后我做了下面的测试。

代码语言:javascript
复制
function greaterThan(n){
  console.log(m)
  return m=>m>n;
}

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

“m不是它的函数传递的参数,但是它将在稍后以更高的顺序传递。”

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-05-15 21:03:11

您的代码注释如下:

代码语言:javascript
复制
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的闭锁机制,它保持存活(而不是被垃圾收集器销毁)
票数 2
EN

Stack Overflow用户

发布于 2021-05-15 21:02:00

在这种情况下,m是由greaterThan返回的lambda函数的参数。

代码语言:javascript
复制
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;
}
票数 2
EN

Stack Overflow用户

发布于 2021-05-15 21:10:00

代码语言:javascript
复制
function greaterThan(n){
  
  return m=>m>n; 

//这里,你实际上是返回一个以m作为参数的箭头fn。

代码语言:javascript
复制
}


const greaterThan10=greaterThan(10);

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

代码语言:javascript
复制
console.log(greaterThan10(11));

//在这里,你作为一个参数传递11到箭头fn,而fn是你返回的

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67551113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档