Razón para la escritura:
Al escribir funciones en JS, generalmente declaramos una función en forma de función de la convención fn () {}. Al leer algunos complementos excelentes, no podemos evitar ver la creación de funciones como var fn = function () {}. ¿Cuál es la diferencia entre ellos? Hoy, hablaremos sobre esta fascinante declaración de funciones en el espíritu de romper la cacerola hasta el final.
Declaración de funciones
Código de muestra de declaración de función
La copia del código es la siguiente:
función fn () {
console.log ('ejecución de la función fn ..');
// código ..
}
De esta manera, declaramos una función llamada FN. Aquí hay un pensamiento. ¿Crees que se ejecutará si se llama en esta función? ¿O se informará un error?
fn (); // llamar a la función FN que declaramos antes
La copia del código es la siguiente:
función fn () {
console.log ('ejecución de la función fn ..');
// código ..
}
Resultado de salida de la consola:
Sí, se puede llamar a la función FN en este momento, así que resumamos las razones aquí.
Resumir:
1: En este momento, la función FN es el resultado de una variable y se almacena en una variable en un contexto global de forma predeterminada (puede verificarse por la ventana. Nombre de la función)
2: Este método es la declaración de función, y ya están disponibles al ingresar la etapa de contexto global e ingresar la etapa de ejecución del código. PD: JavaScript inicializará el entorno de contexto cada vez que ingrese al método (desde global → local)
3: puede afectar objetos variables (solo afectan las variables almacenadas en el contexto)
Expresiones de funciones
Código de muestra de expresión de función
La copia del código es la siguiente:
var fn = function () {
console.log ('FN FN [Expression] declara ejecución ...')
// código ..
}
¿Entonces declaramos una función anónima y señalamos su referencia a la variable FN?
Nuevamente, llámelo una vez arriba y debajo de las funciones declaradas por esta expresión para ver los resultados de salida de la consola.
La copia del código es la siguiente:
// Para ver claramente la salida de la consola, dejamos una marca antes y después de cada llamada para aumentar la legibilidad.
console.log ('antes de que comience la llamada ...');
fn ();
console.log ('La llamada anterior termina ...');
var fn = function () {
console.log ('FN FN [Expression] declara ejecución ...')
// código ..
}
console.log ('La llamada comienza después de eso ...');
fn ();
console.log ('La llamada comienza después de eso ...');
Resultados de la impresión de la consola:
Puede ver que cuando el código se ejecuta por primera vez cuando se llama FN (), el mensaje es: FN no es una función (FN no es un método), y la operación se termina cuando encuentra un error.
Esto muestra que cuando FN () se llama por primera vez, la variable VAR FN no existe como propiedad del objeto global, y el contexto de la función anónima a la que FN no se inicializa, por lo que la llamada falló antes.
La copia del código es la siguiente:
// Ahora comente primero la lógica de llamadas anterior, luego mire la salida de la consola
// console.log ('antes de que comience la llamada ...');
// fn ();
// console.log ('La llamada anterior termina ...');
var fn = function () {
console.log ('FN FN [Expression] declara ejecución ...')
// código ..
}
console.log ('La llamada comienza después de eso ...');
fn (); // llamado después de la expresión
console.log ('La llamada comienza después de eso ...');
Resultados de la impresión de la consola:
Se puede ver que está bien llamar a la función de expresión después de ella. Resumimos por qué?
Resumir:
1: En primer lugar, la variable en sí no existe como una función, sino una referencia a una función anónima (el tipo de valor no pertenece a una referencia)
2: Durante la etapa de ejecución del código, al inicializar el contexto global, no existe como un atributo global, por lo que no causará contaminación de objetos variables.
3: Este tipo de declaración es generalmente común en el desarrollo de complementos, y también puede usarse como una llamada a las funciones de devolución de llamada en cierres.
Entonces la función fn () {} no es igual a var fn = function () {}, tienen diferencias esenciales.