javascript - viviendo - ¿En qué se diferencia un cierre de una devolución de llamada?
mexicanos viviendo en españa (9)
Hice una pregunta sobre las devoluciones de llamada y llegué a otra pregunta (ver comentario). ¿En qué se diferencia un cierre de una devolución de llamada?
¿No veo cómo los dos están incluso relacionados? Un cierre lleva partes de un estado local a una función de algún tipo, piénselo como una 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.
¿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 argumento a otra función
- se invoca (ागू) después de algún tipo de evento
- una vez que su función principal se completa, la función que se pasa como argumento se llama
en inglés sencillo decimos que 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 así. Es común usar 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);
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 enviamos datos a la vista.
Llamar de vuelta
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í sucesivamente para manejar los datos asíncronos.
Consulte 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 a 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.
En palabras simples: una devolución de llamada utilizando variables de contexto es un cierre.
Hay una buena definición de cierres here :
Un "cierre" es una expresión (normalmente una función) que puede tener variables libres junto con un entorno que vincula 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. En general, 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.
Una devolución de llamada en función de una variable de contexto, también conocida como variables vinculadas (== estado de objeto) será un cierre. Será una función pura, de lo contrario, cuando solo tome variables libres (== parámetros).
cierre:
Una palabra clave de función dentro de otra función, está creando un cierre
O una función de retorno a otra función podemos decir cierre.
Nota Inglés llano: una pequeña diferencia de bits que pasa como argumento en otra función es callback o si se define en otra función es el cierre
var length = 101;
function fn2() {
console.log("fffxxx: "+this.length);
}
var obj = {
length: 5,
method3: function(fn) {
fn();
arguments[0]();
}
};
obj.method3(fn2, 1);
fffxxx:101
fffxxx:2**