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

时间:2017-03-17 02:07:51

标签: javascript

我有以下代码:

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

1 个答案:

答案 0 :(得分:0)

当您处理成千上万行代码时,很容易忘记几年前编写的

问题在于,当您从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