我能用JavaScript获得当前运行的函数的名称吗?

在 JavaScript 中,有时候我们需要获取当前正在执行的函数的名称。例如,当发生错误时,我们想要知道是哪个函数导致了错误,或者为了进行调试和性能优化等目的。

方法一:使用 arguments.callee

JavaScript 提供了 arguments.callee 属性来获取当前正在执行的函数对象。该属性返回一个指向当前正在执行的函数的引用。通过该引用,我们可以获取函数的名称。

-------- ----- -
  ----------------------------------- -- -- -----
-

------

但是,使用 arguments.callee 存在一些问题:

  • 在严格模式下,访问 arguments.callee 会抛出异常。
  • 在箭头函数中,arguments.callee 不可用。

因此,不推荐使用 arguments.callee

方法二:使用 Function.caller

另外一种获取当前正在执行的函数的方法是使用 Function.caller 属性。该属性返回对当前函数的调用方的引用。通过该引用,我们可以获取调用方的函数名称。

-------- ----- -
  ----------------------------- -- -- -----
-

-------- ----- -
  ------
-

------

但是,Function.caller 也存在一些问题:

  • 在严格模式下,访问 Function.caller 会抛出异常。
  • 如果函数是从全局作用域调用的,则 Function.callernull
  • 在递归函数中,每个调用的 Function.caller 引用都会指向相同的函数对象。

因此,不推荐使用 Function.caller

方法三:使用 Error.stack

最可靠的方法是通过 Error.stack 属性来获取当前正在执行的函数的名称。该属性返回一个字符串,其中包含了一个函数调用堆栈跟踪。我们可以从字符串中解析出当前正在执行的函数的名称。

-------- ----- -
  --------------- -------------------------------------------- -- -- -----
-

------

在上面的例子中,我们创建了一个新的 Error 对象,并使用正则表达式解析出调用堆栈中第一个非匿名函数的名称。

总结:

  • 不推荐使用 arguments.calleeFunction.caller
  • 推荐使用 Error.stack

当然,在生产环境中,我们不应该在代码中频繁使用这些方法。因为它们可能会影响性能。但是,在开发和调试过程中,它们是很有用的工具。

希望本文对您理解如何在 JavaScript 中获取当前正在执行的函数的名称有所帮助!

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/9929