Skip to content Skip to sidebar Skip to footer

Getting Scope Of Function Caller

I have a function that breaks somewhere in Line 1433 of ExtJS. var createDelayed = function(h, o, scope){ console.log(arguments); //logs undefined all round. return function()

Solution 1:

There is arguments.callee.caller, which refers to the function that called the function in which you access that property. arguments.callee is the function itself.

There is no way to get the scope of the original function without passing it. In the following example, you cannot determine the this value inside foo (apart from knowing there is nothing special happening with this here):

function foo() {
    bar();
}

function bar() {
    console.log(arguments.callee);        // bar function
    console.log(arguments.callee.caller); // foo function
}

foo();

Documentation


To get the line number things becomes trickier, but you can throw an error and look at the stack trace: http://jsfiddle.net/pimvdb/6C47r/.

function foo() {
    bar();
}

function bar() {
    try { throw new Error; }
    catch(e) {
        console.log(e.stack);
    }
}

foo();

For the fiddle, it logs something similar to the following in Chrome, where the end of the line says the line number and character position:

Error
    at bar (http://fiddle.jshell.net/pimvdb/6C47r/show/:23:17)
    at foo (http://fiddle.jshell.net/pimvdb/6C47r/show/:19:5)
    at http://fiddle.jshell.net/pimvdb/6C47r/show/:29:1

Post a Comment for "Getting Scope Of Function Caller"