我有以下代码如下所示:
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.caller
是null
?
当你处理数千行代码时,很容易忘记你几年前编程的内容。
问题是,当您从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]);
如果您在追踪全局变量之类的东西时遇到问题,那么:
- 复制代码(通常是根目录(。
- 转到包含全局变量的任何 JavaScript 文件(它们应始终在任何命名函数之前声明(。
- 如果它们调用您遇到问题的函数,请将它们注释掉或将它们设置为一次
false
一个。