JavaScript - 传递对此当前匿名函数的引用

Pab*_*blo 19 javascript function

window.addEventListener('unload', function(e)
{
    MyClass.shutdown();
    window.removeEventListener('unload', /* how to refer to this function? */);
}, false);
Run Code Online (Sandbox Code Playgroud)

yka*_*ich 21

命名你的功能.

function f(e) {
   MyClass.shutdown();
   window.removeEventListener('unload', f);
}
window.addEventListener('unload', f, false);
Run Code Online (Sandbox Code Playgroud)

编辑我认为这也会奏效.好点科比!

window.addEventListener('unload', function f(e)
{
    MyClass.shutdown();
    window.removeEventListener('unload', f);
}, false);
Run Code Online (Sandbox Code Playgroud)

  • @Michael - 该函数可以在其闭包内本地命名.这是一个小小的改变. (3认同)
  • @Michael:命名你的功能*到目前为止*是允许自己调用它的最佳方式.在大多数当前的实现中使用`arguments.callee`的速度要慢得多(在2x和10x之间 - 是的,真的),并且不适用于ECMAScript的新"严格模式"(你可能会发现你想要开始使用它)某点).现在,性能方面对于取消挂起`onload`处理程序无关紧要,但只是指出它以防你在其他地方应用模式. (3认同)

Ger*_*son 11

如何在匿名函数上使用递归

假设我们有一个匿名的阶乘函数,我们希望递归地执行它.如何在没有名字的情况下调用函数?在Javascript中,arguments.callee属性包含一个指向当前正在执行的函数的指针,这意味着匿名函数确实可以调用自身.

alert((function(n){ if(n <= 1){return 1;}else{return n*arguments.callee(n-1);}})(10));
Run Code Online (Sandbox Code Playgroud)

来源:http://www.hunlock.com/blogs/Functional_Javascript

  • 所以它只是`window.removeEventListener('unload',arguments.calee)`? (2认同)