javascriptcross-browserarguments-object

Arguments.callee is deprecated - what should be used instead?


For doing things like

setTimeout(function () {
    ...
    setTimeout(arguments.callee, 100);
}, 100);

I need something like arguments.callee. I found information at javascript.info that arguments.callee is deprecated:

This property is deprecated by ECMA-262 in favor of named function expressions and for better performance.

But what should be then used instead? Something like this?

setTimeout(function myhandler() {
    ...
    setTimeout(myhandler, 100);
}, 100);
// has a big advantage that myhandler cannot be seen here!!! 
// so it doesn't spoil namespace

BTW, is arguments.callee cross-browser compatible?


Solution

  • Yes, that's what, theoretically, should be used. You're right. However, it doesn't work in some versions of Internet Explorer, as always. So be careful. You may need to fall back on arguments.callee, or, rather, a simple:

    function callback() {
        // ...
        setTimeout(callback, 100);
    }
    
    setTimeout(callback, 100);
    

    Which does work on IE.