Recientemente, estoy mirando Express, y lo he visto en todas partes, usando funciones de devolución de llamada como parámetros. Si este concepto no puede entenderse, el Código de NodeJ y Express estará muy confundido. Por ejemplo:
La copia del código es la siguiente:
app.use (function (req, res, next) {
var err = new Error ('no encontrado');
err.status = 404;
siguiente (err);
});
La aplicación es un objeto, el uso es un método, y el parámetro del método es una función anónima con parámetros, y el cuerpo de la función se da directamente más adelante. ¿Cómo entiendes este código? Primero comprendamos el concepto de funciones de devolución de llamada.
En primer lugar, debemos entender que en JS, las funciones también son objetos, que pueden asignarse a variables y pueden colocarse como parámetros en la lista de parámetros de la función. Por ejemplo:
La copia del código es la siguiente:
var dosomething = function (a, b)
{
devolver a + b;
}
Este código significa definir una función anónima. Excepto por no tener nombre, esta función anónima no es diferente de una función ordinaria. Luego asigne la función anónima a la variable dosimo. A continuación llamamos:
La copia del código es la siguiente:
console.log (Dosomething (2,3));
Esto sale 5.
La función de devolución de llamada se coloca en la lista de parámetros de otra función (como el padre), se pasa al padre como parámetro y luego se ejecuta en una determinada posición en el cuerpo de la función principal. Para ponerlo en abstracción, mire el ejemplo:
La copia del código es la siguiente:
// para ilustrar el concepto de devolución de llamada
var doit = function (devolución de llamada)
{
var a = 1,
b = 2,
c = 3;
var t = devolución de llamada (a, b, c);
devolver t + 10;
};
var d = doit (function (x, y, z) {
return (x+y+z);
});
console.log (d);
Primero defina la función DOIT, y hay una devolución de llamada de parámetros. Esta devolución de llamada es la función de devolución de llamada, y el nombre se puede tomar arbitrariamente. Mirando el cuerpo de la función, primero defina tres variables A, B y C. Luego llame a la función de devolución de llamada. Finalmente, se devuelve un valor.
La siguiente es la función doit. Cabe señalar que cuando definió DOIT en este momento, la devolución de llamada no estaba definida, por lo que no sabía para qué sirve la devolución de llamada. Esto es realmente fácil de entender. Cuando definimos una función, los parámetros solo dan un nombre, como A, usando un cuerpo en la función, pero todo el proceso no sabe qué es A. Solo cuando se llama a la función se especifica, como 2. Mirando hacia atrás, al llamar a DOIT, necesitamos especificar qué es la devolución de llamada. Como puede ver, esta función completa una función de suma.
El proceso de ejecución del código anterior es:
Llamar a la función doit, el parámetro es una función anónima; Ingrese el cuerpo de la función de doit, primero defina A, B, C y luego ejecute la función anónima en este momento, los parámetros son A, B, C y devuelven una T, y finalmente devuelven una T+10 a D.
Volviendo al ejemplo original, App.use (...) es una llamada de función. Podemos imaginar que un método de uso debe haberse definido antes, pero no se da aquí. Al comparar estos dos ejemplos, puede entenderlos de inmediato.
Al usar NodeJS y Express, es imposible para nosotros encontrar la definición de función de cada método o función para echar un vistazo. Así que solo sepa qué parámetros se pasan a la devolución de llamada en esa definición. Luego, al llamar a un método o función, definimos funciones anónimas en los parámetros para completar ciertas funciones.
¡Encima!