为什么arguments.callee.caller不起作用



我有以下代码如下所示:

var b = function() {
    try {
        console.log('b is called')
        console.log(arguments.callee.caller.toString())
    } catch (e) {
        console.log(e)
    }
}
var a = function() {
    setTimeout(b, 0)
}
a()

为什么输出显示arguments.callee.callernull

当你处理数千行代码时,很容易忘记你几年前编程的内容

问题是,当您从console或通过全局变量调用函数时,arguments.callee.caller === null .您可以在任何对调试非常有用的函数中使用以下代码。

console.log((arguments.callee.caller === null) ? 'Console or Global Variable Declaration' : arguments.callee.caller.toString().split('function ')[1].split('(')[0]);

如果您在追踪全局变量之类的东西时遇到问题,那么:

  1. 复制代码(通常是根目录(。
  2. 转到包含全局变量的任何 JavaScript 文件(它们应始终在任何命名函数之前声明(。
  3. 如果它们调用您遇到问题的函数,请将它们注释掉或将它们设置为一次false一个。

最新更新