2009-11-24 16 views
8

supongo que el siguiente código:javascript: función de llamada a sí

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

    //do something 

}); 

¿Cómo podría recordar a esta función "anónimo" ?, no se puede poner un nombre a esta función:

var xfun = function(){ 

    //do something 

} 

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

puedo hacer algo como esto:

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 

}); 

lo que necesito es algo como esto:

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

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

}); 

gracias.

EDIT:

Solución:

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

... y la pregunta es? – OscarRyz

+2

@Oscar: la pregunta es "¿cómo vuelvo a ejecutar una función anónima desde el interior de la función anónima?" –

Respuesta

20

hecho puede nombrar a su función anónima:

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

Puede también utilizar arguments.callee:

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

Me gustaría ir con el primero.

+0

+1 Tuve la misma idea. – Gumbo

+0

muchas gracias. –

+3

@andres: np. Es una pregunta importante teniendo en cuenta la desaprobación de 'arguments.callee': https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee –

1

¿Puede explicar por qué no puede nombrar la función? Puede usar arguments.callee para obtener una referencia a la función actual, pero eso está en desuso y no estoy seguro de cuánto soporte tiene entre los navegadores actuales.

Cuestiones relacionadas