代码之家  ›  专栏  ›  技术社区  ›  Pablo

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

  •  19
  • Pablo  · 技术社区  · 14 年前
    window.addEventListener('unload', function(e)
    {
        MyClass.shutdown();
        window.removeEventListener('unload', /* how to refer to this function? */);
    }, false);
    
    4 回复  |  直到 14 年前
        1
  •  21
  •   ykaganovich Mike Samuel    14 年前

    命名你的函数。

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

    编辑 我想这也行。很好,科比!

    window.addEventListener('unload', function f(e)
    {
        MyClass.shutdown();
        window.removeEventListener('unload', f);
    }, false);
    
        2
  •  11
  •   Germán Rodríguez    14 年前

    如何使用递归匿名函数

    假设我们有一个匿名的阶乘函数,我们想递归地执行它。如何调用没有名称的函数?在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

        3
  •  2
  •   gnarf    14 年前

    这个 callee 性质 arguments 对象 总是 引用调用的函数:

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

    见: MDC: callee

        4
  •  1
  •   Andrew    14 年前

    我还没有尝试过,但是如何将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();
    

    我想这取决于我的类做什么以及你如何使用它。