1. Se llama función anónima que se ejecuta inmediatamente (también se llama función que llama inmediatamente)
2. Cuando se encierra una función anónima y luego se agrega un soporte a la parte posterior, ¡la función anónima se puede ejecutar de inmediato! ¿Hay algo mágico?
3. Para usar una función, primero debemos declarar su existencia. La forma más común que usamos es definir una función utilizando la instrucción de función
4. Objeto de función
Los objetos de función son objetos inherentes en JavaScript, y todas las funciones son en realidad un objeto de función.
Primero veamos si el objeto de función puede usar directamente el constructor para crear una nueva función. La respuesta es sí.
var abc = nueva función ("x", "y", "return x*y;"); alerta (ABC (2,3)); // "6"5. Las funciones anónimas no tienen nombres, por lo que se extiende a la pregunta de cómo debemos llamarlos (o_o).
Llamando a las funciones anónimas①
var abc = function (x, y) {return x+y; } alerta (ABC (2,3)); // "5"La operación anterior es realmente equivalente a definir una función de una manera diferente. Este uso es algo que encontramos con más frecuencia.
Por ejemplo, cuando configuramos una función de controlador de eventos de elementos DOM, generalmente no los nombramos, sino que le damos a su evento correspondiente una referencia a una función anónima.
Llamar a la función anónima②
Use () para encerrar la función anónima y luego agregar un par de soportes (incluida la lista de parámetros).
alerta ((nueva función ("x", "y", "return x*y;")) (2,3)); // "6"6. ¿Cuál es el papel de los soportes?
Los soportes pueden dividir nuestras expresiones en trozos, y cada pieza, es decir, cada par de aparatos ortopédicos, tiene un valor de retorno. Este valor de retorno es en realidad el valor de retorno de la expresión entre paréntesis.
Por lo tanto, cuando encerramos una función anónima con un par de soportes, los paréntesis devuelven un objeto de función de una función anónima.
Por lo tanto, agregar funciones anónimas al par de soporte es como una función con nombre y obtenemos su posición de referencia. Entonces, si agrega una lista de parámetros después de esta variable de referencia, se implementará el formulario de llamada de la función ordinaria.
7. Declaraciones de funciones, expresiones de funciones, funciones anónimas
Declaración de funciones: función fnname () {...}; Use la palabra clave de función para declarar una función y luego especifique un nombre de función, llamada declaración de función.
Function Expression var fnname = function () {...}; declare una función utilizando la palabra clave de función, pero no nombra la función. Finalmente, a la función anónima se le asigna una variable, llamada expresión de función, que es la forma más común de sintaxis de expresión de función.
Función anónima: function () {}; Use la palabra clave de función para declarar una función, pero la función no se nombra, por lo que se llama función anónima. Las funciones anónimas pertenecen a expresiones de funciones. Las funciones anónimas tienen muchas funciones. Si asigna una variable, crea una función, y si asigna un evento, se convierte en un controlador de eventos o crea un cierre, etc.
La diferencia entre la declaración de función y la expresión de la función es que
1. Cuando el código de JavaScript del motor JavaScript, "Funcionar Declaración de elevación" (Declaración de funciones de elevación) Declaración de función en el entorno de ejecución actual (alcance). Las expresiones de la función deben esperar hasta que el motor JavascITRP se ejecute a su línea antes de analizar la expresión de la función de la línea superior a la línea inferior.
2. La expresión de la función se puede llamar inmediatamente con los soportes después. La declaración de función no se puede hacer y solo se puede llamar en forma de fnname ().
Castaño
fnname (); function fnname () {...} // normal, porque 'promocionando' la declaración de función, la llamada de función puede ser fnname (); var fnname = function () {...} // Se informa un error, la variable fnname no ha guardado una referencia a la función, y la llamada de función debe ser después de la expresión de función de la funciónCastaño
var fnname = function () {alert ('Hello World');} (); // se agregan parcelas después de la expresión de la función. Cuando el motor JavaScript analiza aquí, la función se puede llamar inmediatamente cuando el motor JavaScript analiza aquí la función fnname () {alert ('Hello World');} (); // } (); // El error de sintaxis, aunque las funciones anónimas pertenecen a expresiones de funciones, no se realiza una operación de asignación, // por lo que el motor JavaScript trata la palabra clave de función al principio como una declaración de función e informa un error: se requiere un nombre de funciónSi desea agregar soportes después del cuerpo de funciones, puede llamarlo inmediatamente, entonces esta función debe ser una expresión de la función, no una declaración de función.
Castaño
(function (a) {console.log (a); // Firebug output 123, use el operador ()}) (123); (function (a) {console.log (a); // Firebug output 1234, use el operador ()} (1234)); // Salida de Firebug 12345, ¡use! Operador} (12345); +función (a) {console.log (a); // salida de Firebug 123456, use + operador} (123456); -función (a) {console.log (a); // Salida de Firebug 1234567, use - operador} (1234567); var fn = function (a) {console.log (a); // Salida de Firebug 12345678, use = operador} (12345678)¡Puede ver el resultado de salida y agregarlo antes de la función! , +, - e incluso las comas se pueden usar para ejecutar inmediatamente después de definir la función, y (),! Operadores como +, -, = convertir las declaraciones de funciones en expresiones de funciones, eliminando la ambigüedad entre el motor JavaScript que identifica expresiones de funciones y declaraciones de funciones, diciéndole al motor JavaScript que esta es una expresión de funciones, no una declaración de función, puede agregar paréntesis después de él y ejecutar el código de la función de inmediato.
Agregar entre paréntesis es la forma más segura de hacerlo, ¡porque! Los operadores como, +y - también realizarán operaciones con el valor de retorno de la función, lo que a veces causa problemas innecesarios.
Pero, ¿de qué sirve escribir de esta manera?
No hay concepto de alcance privado en JavaScript. Si declara algunas variables en el alcance global o local en un proyecto desarrollado por varias personas, otros pueden ser sobrescritos por otros con el mismo nombre. Según las características de la cadena de alcance de las funciones de JavaScript, esta técnica se puede utilizar para imitar un alcance privado y usar una función anónima como un "contenedor". El "contenedor" puede acceder a variables externas, mientras que el entorno externo no puede acceder a variables dentro del "contenedor", por lo que las variables definidas dentro (function () {...}) () no entrarán en conflicto con variables externas, comúnmente conocidas como "envoltura anónima" o "espacio de nombres".
JQuery usa este método. Cuando el código jQuery está envuelto en (función (ventana, indefinido) {... código jQuery ...} (ventana), puede proteger las variables internas de jQuery al llamar al código jQuery en el alcance global.