Getting scope of function caller

后端 未结 1 1698
时光说笑
时光说笑 2021-01-12 15:00

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.         


        
相关标签:
1条回答
  • 2021-01-12 15:25

    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
    
    0 讨论(0)
提交回复
热议问题