window.addEventListener('unload', function(e)
{
MyClass.shutdown();
window.removeEventListener('unload', /* how to refer to this function? */);
}, false);
答案 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));
答案 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的作用以及你如何使用它。