javascriptuse-strict

How do you find out the caller function in JavaScript when use strict is enabled?


Is it possible to see the callee/caller of a function when use strict is enabled?

'use strict';

function jamie (){
    console.info(arguments.callee.caller.name);
    //this will output the below error
    //uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
};

function jiminyCricket (){
   jamie();
}

jiminyCricket ();


Solution

  • For what it's worth, I agree with the comments above. For whatever problem you're trying to solve, there are usually better solutions.

    However, just for illustrative purposes, here's one (very ugly) solution:

    'use strict'
    
    function jamie (){
        var callerName;
        try { throw new Error(); }
        catch (e) { 
            var re = /(\w+)@|at (\w+) \(/g, st = e.stack, m;
            re.exec(st), m = re.exec(st);
            callerName = m[1] || m[2];
        }
        console.log(callerName);
    };
    
    function jiminyCricket (){
       jamie();
    }
    
    jiminyCricket(); // jiminyCricket
    

    I've only tested this in Chrome, Firefox, and IE11, so your mileage may vary.