繁体   English   中英

function 如何在 JavaScript 中引用自身?

[英]How can function reference itself within itself in JavaScript?

我根据代码的执行方式以及您可能需要它的原因来理解递归。 我想知道的是,function 是否可以在自身内部引用自身?

给定以下示例:

function factorial(num) {
  if(num ===0) {
    return 1
  }
  return (num * factorial(num - 1));
}

factorial(2)

我想了解变量如何存储在 memory 中以及如何调用它们以及为什么可以在factorial function 中引用factorial的幕后发生的事情。

我理解目前将如何执行的方式:

  1. 在堆栈上声明一个 function factorial ,它将引用堆上的 object。 此刻factorial依然无处可去
  2. 在将计算阶乘的堆(函数)上创建一个 object
  3. 调用factorial(2)它将获取factorial指向的堆栈上的引用,在堆上找到 function 并调用它。

我不明白的是,当调用factorial时,它会知道什么是factorial以及在哪里可以找到它? 它是否与闭包有关?

另一个例子(笑话)

  const someFunction = jest.fn((value) => {
    expect(someFunction).toHaveBeenCalled()
  })

为什么我可以在someFunction中引用someFunction ,如前所述,我怀疑它与 memory 以及变量的存储方式有关,但我没有完全掌握这个概念。,

By using a named function declaration/ expression , the call checks the inner scope of the function and if it is not inside, it check the name of the called function and then the outer scope.

但是,可以使用 function 表达式提供名称。 提供名称允许 function 引用自身,并且还可以更容易地在调试器的堆栈跟踪中识别 function

通过使用箭头函数,function 的名称未设置,并且不会通过重命名为命名 function 声明的对面而保留,其中名称始终可以从内部 Z31A1FD140BE4BEF2D511E121EC9A 调用。

MDN Web 文档的 Function 指南包含您寻求的信息。 您可以通过多种方式从 function 内部引用它。 归结为一个事实,即

a function 可以访问定义在 scope 中的所有变量和函数

您可以将其阅读为 function 可以访问定义它的 scope 中定义的所有内容。 这包括它自己。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM