ilg*_*aar 20 javascript function call
是否有可能找出调用函数的位置?如果是,那么如果从全局范围调用函数,从另一个函数,或者可能从浏览器控制台调用,如何检测?
看一下下面的例子:
<script>
function myFunc1() {
// some code
myFunc2(); // I was called from myFunc1()
}
function myFunc2() {
var callerName = new String;
callerName = arguments.callee.caller.name;
// some code
alert('I was called from ' + callerName + ' function');
}
myFunc2(); // I was called from global scope
</script>
Run Code Online (Sandbox Code Playgroud)
我知道callerName = arguments.callee.caller.name;上面例子中的这一行会给我调用函数的名字.但我不知道如何检测是否从全局范围调用函数.例如,如果我更改myFunc2()并添加一个if else语句来检查是否arguments.callee.caller.name返回一个undefined值,知道这将发生,当从全局范围调用一个函数时:
myFunc2() {
var callerName = new String;
callerName = arguments.callee.caller.name;
if(callerName == undefined) {
alert('I was called from global scope');
} else {
alert('I was called from ' + callerName + ' function');
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果myFunc2()从全局范围调用此方法并且callerName = arguments.callee.caller.name;将导致JavaScript抛出以下错误,则此方法无效:
TypeError: 'null' is not an object (evaluating 'arguments.callee.caller.name')
Run Code Online (Sandbox Code Playgroud)
所以我回到原点,问题仍然存在:
Gen*_*ano 14
在Chrome中,您可以使用:
console.trace();
Run Code Online (Sandbox Code Playgroud)
只需在函数中添加该行,我通常将其作为第一行.如果您查看控制台,您将看到您的功能名称,在该行下方,您将看到它的调用位置.