Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

argument.callee.name alternative in the new ECMA5 Javascript Standard [duplicate]

I'm working on porting some old code to 'strict mode', what are the alternatives to the argument.callee and similar argument.caller etc in the ECMA5 standard?


ADDED INFO: I did not specify why I need the argument.caller/callee.

The code I'm porting is using

assert.ok(elemNode, arguments.callee.name + ": Entity - " + entityId + " has been found");

If it were simple recursion I could use function name(){ ... function() ... }, but I can't seem to find what to do with the above code.

like image 299
ffledgling Avatar asked Mar 21 '13 20:03

ffledgling


1 Answers

Starting with ECMAScript 3, you can have named function expressions. Prior to that function expressions were anonymous, which made arguments.callee necessary. Named function expressions made it unnecessary. So that's the recommended alternative.

See the MDN docs for callee

Example:

[1,2,3,4,5].map(function factorial (n) {
    return !(n > 1) ? 1 : factorial(n-1)*n;
});

The benefits of named functions (from the MDN docs):

  • the function can be called like any other from inside your code
  • it does not pollute the namespace
  • the value of this does not change
  • it's more performant (accessing the arguments object is expensive)
like image 139
Ben McCormick Avatar answered Nov 15 '22 00:11

Ben McCormick