¡Los expertos se desvían! Esto no tiene nada que ver con el cierre en sí, y no sé cómo obtener el título, así que acabo de recopilar el número. ¡Espero perdonarme!
Hoy, un amigo que acaba de enterarse de JS me dio un código y me preguntó por qué no fue ejecutado el método. El código es el siguiente:
La copia del código es la siguiente:
función makefunc (x) {
Función de retorno () {
regresar x;
}
}
alerta (MakeFunc (0));
De hecho, no es que no sea que no se ejecute, sino que el amigo significa que la alerta debe ser "0", no function () {return x;}.
No es que el script esté escrito mal, es solo que no entiende la devolución, sale de la función actual y devuelve un valor de esa función. Si la función devuelta es una función, entonces la función devuelta en sí también es la función misma.
Puede modificar el código anterior como este, que es alerta (makefunc (0) ()):
La copia del código es la siguiente:
función makefunc (x) {
return (function () {
regresar x;
}) ();
}
alerta (MakeFunc (0) ());
Si desea devolver el resultado de la ejecución de la función, primero debe dejar que la función se ejecute, por ejemplo:
La copia del código es la siguiente:
función makefunc (x) {
return (function () {
regresar x;
}) ();
}
alerta (MakeFunc (0));
Aquí hay una función anónima.
La copia del código es la siguiente:
(función (){
regresar x;
}) ();
Dentro del primer soporte hay una función anónima, el segundo soporte se usa para llamar a la función anónima, y puede pasar en los parámetros requeridos en el segundo soporte. Por ejemplo:
La copia del código es la siguiente:
(función (x, y) {
alerta (x + y);
})(veintitrés );