2009-03-05 16 views
5

Definición de devolución de llamada:

A Función que se establece como una propiedad dentro de un Componente. Y generalmente se llama cuando ocurre algún evento en el Componente.¿Esto se ajusta a su definición de devolución de llamada?

Por ejemplo:

Si desea mostrar un cuadro de diálogo que dice "Estaba hecho clic en" cuando el usuario hace clic en el componente componentB, podría escribir un método almacenado como una variable que hace esto :

var mouseDownCallbackFunction = function() { 
    alert("I was clicked!"); 
}; 

Siguiente, se establecería esta función dentro del componente como tal ...

// Set the Component to display the dialog when the 
// user presses the mouse down on it. 
componentB.setMouseDownCallback(mouseDownCallbackFunction); 

Y esto causaría mouseDownCallbackFunction para mostrar "Me hizo clic" en un cuadro de alerta cuando se hace clic en el componente.

+0

¿Qué ocurre cuando ejecuta esto? – cbrulak

+0

Cuando el usuario hace clic en el Componente, después de ejecutar este código, aparece un cuadro de diálogo "Me hicieron clic" – leeand00

+0

Tenga en cuenta que también puede usar funciones anónimas lambdas aka que proporcionan un código menos, como este: componentB.setMouseDownCallback (function() { alerta ("¡Me hicieron clic!"); }); – svinto

Respuesta

2

En C, esa sería una devolución de llamada válida. Sin embargo, no estoy tan familiarizado con JavaScript para decir si es o no, porque no estoy seguro de cómo se tratan las variables con respecto a sus ubicaciones de memoria.

En C/C++ se podría declarar un puntero nulo:

void aFunction() 
{ 
    do stuff 
} 

int main() 
{ 
    void* myCallback = &aFunction; 
    componentB.setMouseDownCallback(myCallback); 
} 

funcionaría.

Sin embargo, a pesar de mi falta de conocimientos de JavaScript, sé que

componentB.setMouseDownCallback(function() { 
     alert("I was clicked!"); 
     }; 
); 

es válido también.

EDITAR añade un no a la segunda frase: "No estoy tan familiarizado"

+0

¡Gracias! Trabajo en una tienda de C++, y soy su tipo en la red ... esto ayudará inmensamente al argumentar mi caso! Gracias starko! – leeand00

+0

justo, me alegro de poder ayudar :) – cbrulak

+0

gracias @Victor Acabo de comprometerme :) – cbrulak

-1

sí, eso es una devolución de llamada.

3

Sí, esto está describiendo la definición exacta de una devolución de llamada ...

2

Sí, una devolución de llamada es una función que está definida en un nivel más alto de lo que se llama. Su código de cliente crea la función y luego la pasa como un parámetro al componentB, para que componentB la llame más tarde.

2

En JavaScript, técnicamente, eso es un cierre , ya que se puede unir a cualquier variable en el estudio que se hace referencia .

Pero los cierres son solo una mejor forma de devolución de llamada, así que sí, eso es una devolución de llamada. Una devolución de llamada en C es más primitiva, proporcionando solo una referencia de puntero a una función escrita, sin vincular a ningún contexto.

+0

Hmm ... entonces me pregunto cómo un cierre es diferente de una devolución de llamada? – leeand00

+0

... haciendo la pregunta aquí: http://stackoverflow.com/questions/615907/how-is-a-closure-different-from-a-callback – leeand00

+0

La otra pregunta está bien respondida, y es lo que quise decir en mi primera declaración en referencia a una variables de enlace de cierre, frente a una devolución de llamada C que es solo un punto de función. –

Cuestiones relacionadas