Pregunta

Le pregunté a una pregunta sobre devoluciones de llamada y llegó a otra pregunta (ver comentario). ¿En qué se diferencia un cierre de una devolución de llamada?

¿Fue útil?

Solución

Verifique la introducción en este: http://jibbering.com/faq/faq_notes/closures. html . Puede ayudarlo a comprender mejor cómo se relacionan los cierres con las funciones.

Aquí hay un conjunto de ejemplos de cierre: http://www.javascriptkit.com/javatutors/ closures2.shtml

Básicamente, la devolución de llamada es como un puntero de función. El bit que lo hace un cierre, es cuando esa función accede a cualquier cosa en el contexto donde vive, como las variables externas. Cuando eso suceda, la función utilizará los valores actuales de las variables (en lugar de copiarlas). Ver ejemplo 4.

Otros consejos

Diferentes definiciones:

Devolución de llamada -

  

una devolución de llamada es un código ejecutable que se pasa como un argumento a otro código.

Closure -

  

un cierre es una función que se evalúa en un entorno que contiene una o más variables vinculadas. Cuando se llama, la función puede acceder a estas variables.

Hay una buena definición de cierres aquí :

  

Un " cierre " es una expresion   (típicamente una función) que puede tener   variables libres junto con una   Entorno que une esas variables.   (que " cierra " la expresión).

En la práctica, eso significa que es una función que tiene algunas variables ocultas.

Una devolución de llamada es una idea de nivel superior. Generalmente es una función que se transmite con la intención de ser llamada en un momento posterior. En JavaScript, los cierres se utilizan a menudo como devoluciones de llamada.

En palabras simples: una devolución de llamada utilizando variables de contexto es un cierre.

Una devolución de llamada en función de una variable de contexto, también conocida como variables enlazadas (== estado del objeto) será un cierre. Será una función pura, de lo contrario, cuando solo tome variables libres (== parámetros).

Aquí hay una manera de diferenciar entre esos dos:

Cierre

  

Un Cierre se usa para ampliar la funcionalidad, por ejemplo, si un usuario hace clic en un botón, queremos que suceda algo en la pantalla, en ese caso, usaríamos un Cierre donde pasamos el evento del usuario (un clic) y luego Empuje los datos a la vista.

Devolución de llamada

  

Una devolución de llamada es más o menos similar a un cierre, pero se usa más para informar y proporcionar capacidades síncronas. Por ejemplo, si realiza llamadas jQuery Ajax, tendrá devoluciones de llamada como success () , error () , beforeSend () y así adelante para manejar los datos asíncronos.

¿Qué es una función de devolución de llamada?

Una función de devolución de llamada es una función que es:

  • pasado como un argumento a otra función
  • se invoca (& # 2354; & # 2366; & # 2327; & # 2370;) después de algún tipo de evento
  • una vez que su función principal se completa, la función que se pasa como un argumento se llama

en inglés sencillo decimos Una devolución de llamada es cualquier función a la que llama otra función, que toma la primera función como un parámetro o una función pasada como un argumento

  • Nota: invocado : el código dentro de una función se ejecuta cuando se invoca la función. o decimos asi Es común utilizar el término " llamar a una función " en lugar de " invocar una función " ;.

También es común decir "llamar a una función", "iniciar una función", o "ejecutar una función".

 function getUserInput(firstName, lastName, age, callback2,callback1) {
    var fullName = firstName + " " + lastName;

    // Make sure the callback is a function
    if (typeof callback2 === "function") {
    // Execute the callback function and pass the parameters to it
    callback2(fullName, age);
    }
	
    if (typeof callback1 === "function") {     
    callback1(lastName);
    }
}

function callbackforlastname1(lname){
 console.log("---");
}
 
function genericPoemMaker(name, aged) {
    console.log(name + " is finer than fine wine.");
     console.log("A " + aged + " of unfortunl smile");
}

getUserInput("Avinash", "Maurya", "26", genericPoemMaker,callbackforlastname1); 
& # 2320; & # 2360; & # 2375; & nbsp; & # 2325; & # 2377; & # 2354; & # 2325; & # 2352; & # 2340; & # 2375; & # 2361; & # 2376;

cierre:

  • Una palabra clave de función dentro de otra función, está creando un cierre

  • O Una función vuelve a otra función, podemos decir el cierre

Nota Inglés llano: una pequeña función de diferencia de bits que pasa como argumento en otra función es devolución de llamada o si se define en otra función está cerrada

var length = 101;
function fn2() {
	console.log("fffxxx: "+this.length);
}
 
var obj = {
  length: 5,
  method3: function(fn) {
    fn();
    arguments[0]();
  }
};
 
obj.method3(fn2, 1);
   
 ** Salida & # 2361; & # 2379; & # 2327; & # 2366;

fffxxx:101
fffxxx:2**

¿No veo cómo están relacionados los dos? Un cierre lleva partes de un estado local a una función de algún tipo, piense que pasa por referencia.

Una devolución de llamada está destinada a notificarle sobre ciertos cambios y redirige el flujo del programa. El cierre podría modificar el estado local, pero nunca obtendría tiempo de procesador para manejar eso, como lo haría con una devolución de llamada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top