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

时间:2010-05-12 05:00:54

标签: javascript function

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

4 个答案:

答案 0 :(得分:21)

为您的功能命名。

function f(e) {
   MyClass.shutdown();
   window.removeEventListener('unload', f);
}
window.addEventListener('unload', f, false);

编辑我认为这也会奏效。好点Kobi!

window.addEventListener('unload', function f(e)
{
    MyClass.shutdown();
    window.removeEventListener('unload', f);
}, false);

答案 1 :(得分:11)

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

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

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

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

答案 2 :(得分:2)

callee对象始终arguments属性是指被调用的函数:

window.addEventListener('unload', function(e)
{
    MyClass.shutdown();
    window.removeEventListener('unload', arguments.callee);
}, false);

请参阅:MDC: callee

答案 3 :(得分:1)

我没有尝试过这个,但是如何将removeEventListener方法调用移动到MyClass本身。该方法不是匿名的,但您不会污染全局命名空间,它将成为它操作的类的一部分。你甚至可以把它变成“私人的”。我不确定你的风格是什么,但我写的是这样的:

var MyClass = function(){
  var self = this;
  self.shutdown = function(){ 
    window.removeEventListener('unload',self.shutdown,false);
  };
  self.initialize = function() {
    window.addEventListener('unload',self.shutdown,false);
  };
  return self;
};
var myObject = new MyClass();
myObject.initialize();

我想这取决于MyClass的作用以及你如何使用它。