8

I suppose the following code:

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

    //do something

});

How could I recall to this function "anonymous"?, I can not put a name to this function:

var xfun = function(){

    //do something

}

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

I can do something like this:

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

});

what I need is something like this:

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

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

});

thanks.

EDIT:

Solution:

jQuery("#mybutton").click(function(){
  if (working){
    var fn = arguments.callee;
    var _this = this;
    setTimeout(function(){fn.call(_this);}, 200);
    return false;
  }
  //do something    
});
1
  • 3
    @Oscar: the question is "how do I re-run an anonymous function from inside the anonymous function?" Commented Nov 24, 2009 at 18:00

2 Answers 2

20

You can indeed name your anonymous function:

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

You can also use arguments.callee:

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

I'd go with the former.

Sign up to request clarification or add additional context in comments.

4 Comments

@andres: np. Tis an important question considering the deprecation of arguments.callee: developer.mozilla.org/En/Core_JavaScript_1.5_Reference/…
Only Function.arguments.callee is deprecated (the whole of Function.arguments is a terrible idea); arguments.callee is still OK. Whilst I too would probably go with the named function expression, note there is a bug in IE where the name is visible not only inside the function as expected, but also in the parent scope, as if you'd written a function statement. So make sure you don't use the name doWork in the surrounding function (or global).
with the modification that I show in question (edition), I could solve the problem that had the context of the function. thank @Crescent Fresh
worth noting, a named function is no longer anonymous. it's just a closure.
1

Can you explain why you can't name the function? You can use arguments.callee to get a reference to the current function, but that is deprecated and I'm not sure how much support it has among current browsers.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.