Javascript找到调用函数

时间:2011-11-21 11:43:00

标签: javascript javascript-events firebug

我在JS中有一个函数,它从多个地方调用..

现在我在iPad上测试这个页面,因此发现调试有点困难。

我可以通过某种方式(在控制台上打印)从我的函数调用位置找到吗?

4 个答案:

答案 0 :(得分:15)

喜欢这个吗?

function testOne() {
    console.log("Test 1");
    logTest();
}
function testTwo() {
    console.log("Test 2");
    logTest();
}
function logTest() {
    console.log("Being called from " + arguments.callee.caller.toString());
}

testOne();
testTwo();

如果您在JavaScript文件中使用'use strict';,则需要对其进行评论/删除,否则您将获得以下内容:

  

未捕获的TypeError:严格模式函数或调用它们的参数对象可能无法访问'caller','callee'和'arguments'属性

答案 1 :(得分:10)

我喜欢使用的一种简单方法是arguments.callee.caller.name

假设您想知道调用名为myFunction的函数是什么:

function myFunction() {
    console.log(arguments.callee.caller.name);
    /* Other stuff... */
}

浏览器对此的支持并不是那么好,所以你可以使用arguments.callee.caller.toString()代替。请注意,这将返回调用myFunction的函数的内容,因此您需要自己挖掘函数名称。

或者,您可以使用这样的好的堆栈跟踪功能:

function getStack(){
    fnRE  = /function\s*([\w\-$]+)?\s*\(/i;
    var caller = arguments.callee.caller;
    var stack = "Stack = ";
    var fn;
    while (caller){
        fn = fnRE.test(caller.toString()) ? RegExp.$1 || "{?}" : "{?}";
        stack += "-->"+fn;
        caller = caller.arguments.callee.caller;
    };
    return stack;
}

通过http://www.amirharel.com/2010/01/25/using-caller-and-callee-for-stack-trace/

进行堆栈追踪

答案 2 :(得分:0)

想详细了解来电者功能:

function nishant(){  // Caller function 
   kumar();
}nishant();

function kumar(){ // Callee
 console.log("This functiona is being called by " + arguments.callee.caller.toString());
}  

我们也可以使用arguments.callee.caller.toString()

代替functionName.caller

示例:

function nishant(){  // Caller function 
   kumar();
}nishant();

function kumar(){ // Callee
 console.log("This functiona is being called by " + kumar.caller);
}  

输出:在上述两种情况下都是相同的

This functiona is being called by function nishant()
{
kumar();
}

答案 3 :(得分:0)

请勿使用功能。调用方为non standard,不推荐使用

代替使用浏览器控制台,并在函数上放置断点,检查 调用堆栈

这是chrome调试器控制台的屏幕截图

enter image description here