【问题标题】:javascript: function call to itselfjavascript:对自身的函数调用
【发布时间】:2009-11-24 17:54:26
【问题描述】:

我想下面的代码:

jQuery("#mybutton").click(function(){

    //do something

});

我怎么能回忆起这个函数“匿名”?,我不能给这个函数起个名字:

var xfun = function(){

    //do something

}

jQuery("#mybutton").click(xfun);

我可以这样做:

var working = false;
jQuery("#mybutton").click(function(){

  if (working){
    var _this = this;
    _this._eventType = e.type;
    setTimeout(function() { jQuery(_this).trigger(_this._eventType); }, 200);
    return false;
  }
  //do something

});

我需要的是这样的:

var working = false;
jQuery("#mybutton").click(function(){

  if (working){
    setTimeout( this_function, 200);
    return false;
  }
  //do something

});

谢谢。

编辑:

解决方案:

jQuery("#mybutton").click(function(){
  if (working){
    var fn = arguments.callee;
    var _this = this;
    setTimeout(function(){fn.call(_this);}, 200);
    return false;
  }
  //do something    
});

【问题讨论】:

  • @Oscar:问题是“如何从匿名函数内部重新运行匿名函数?”

标签: javascript jquery


【解决方案1】:

您确实可以命名您的匿名函数:

jQuery("#mybutton").click(function doWork(){
  if (working){
    setTimeout(doWork, 200);
    return false;
  }
  //do something    
});

你也可以使用arguments.callee:

jQuery("#mybutton").click(function(){
  if (working){
    setTimeout(arguments.callee, 200);
    return false;
  }
  //do something    
});

我会选择前者。

【讨论】:

  • @andres:np。考虑到 arguments.callee 的弃用,这是一个重要的问题:developer.mozilla.org/En/Core_JavaScript_1.5_Reference/…
  • 只有Function.arguments.callee 被弃用(整个Function.arguments 是个糟糕的主意); arguments.callee 还可以。虽然我也可能会使用命名函数表达式,但请注意 IE 中存在一个错误,其中名称不仅在预期的函数内可见,而且在父范围内可见,就好像您编写了函数语句一样。所以请确保不要在周围的函数(或全局)中使用名称 doWork
  • 通过我在问题(版本)中显示的修改,我可以解决具有函数上下文的问题。感谢@Crescent Fresh
  • 值得注意的是,命名函数不再是匿名的。这只是一个关闭。
【解决方案2】:

你能解释一下为什么你不能命名这个函数吗?您可以使用arguments.callee 来获取对当前函数的引用,但这已被弃用,我不确定它在当前浏览器中的支持程度。

【讨论】:

    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2013-04-12
    • 2019-02-17
    • 1970-01-01
    • 2011-07-19
    相关资源
    最近更新 更多