不推荐使用Arguments.callee - 应该使用什么?

TMS*_*TMS 38 javascript cross-browser

做的事情

setTimeout(function () {
    ...
    setTimeout(arguments.callee, 100);
}, 100);
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西arguments.callee.我在javascript.info上找到了arguments.callee不推荐使用的信息:

ECMA-262 不推荐使用此属性,而是使用命名函数表达式以获得更好的性能.

但是应该用什么呢?像这样的东西?

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

BTW,是否arguments.callee跨浏览器兼容?

Ry-*_*Ry- 10

是的,理论上应该使用这个.你是对的.但是,它在某些版本的Internet Explorer中不能像往常一样工作.所以要小心.您可能需要依赖arguments.callee,或者更简单地说:

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

setTimeout(callback, 100);
Run Code Online (Sandbox Code Playgroud)

哪个适用于IE.

  • @TomasT:它*是*标准 - 但是从什么时候开始IE已经完全标准化了?:)(好吧,也许是IE10.)我记得被它绊了一段时间.快速测试表明,它至少不是IE7中的问题.可能是IE6.我没有和我一起测试. (3认同)

小智 5

但是应该用什么呢?像这样的东西?

是的,你回答了自己的问题.有关更多信息,请参阅此处:

为什么在JavaScript中不推荐使用arguments.callee.caller属性?

关于为什么要做出这种改变,它有一个非常好的讨论.