Visit Mozilla.org

Core JavaScript 1.5 Reference:Global Objects:Function:caller

From MDC

Non-standard

Contents

[edit] Summary

Returns the function that invoked the specified function.

This property is not part of ECMA-262 Edition 3 standard. It is implemented at least in SpiderMonkey (the JavaScript engine used in Mozilla) (see bug 65683) and JScript.

Property of Function
Implemented in: JavaScript 1.5

[edit] Description

If the function f was invoked by the top level code, the value of f.caller is null, otherwise it's the function that called f

This property replaces deprecated arguments.caller.

[edit] Notes

Note that in case of recursion, you can't reconstruct the call stack using this property. Consider:

function f(n) { g(n-1) }
function g(n) { if(n>0) f(n); else stop() }
f(2)

At the moment stop() is called the call stack will be:

f(2) -> g(1) -> f(1) -> g(0) -> stop()

The following is true:

stop.caller === g && f.caller === g && g.caller === f

so if you tried to get the stack trace in the stop() function like this:

var f = stop;
var stack = "Stack trace:";
while (f) {
  stack += "\n" + f.name;
  f = f.caller;
}

the loop would never stop.

The special property __caller__, which returned the activation object of the caller thus allowing to reconstruct the stack, was removed for security reasons.

[edit] Examples

[edit] Example: Checking the value of a function's caller property

The following code checks the value a function's caller property.

function myFunc() {
   if (myFunc.caller == null) {
      return ("The function was called from the top!");
   } else
      return ("This function's caller was " + myFunc.caller);
}