Declaración de funciones
función foo () {}La función FOO se izará antes de ejecutar todo el programa, por lo que está disponible en todo el alcance (alcance) que define la función FOO. Incluso llamarlo antes de la definición de función está bien.
foo (); // funciona porque Foo fue creado antes de este código RunSfunction foo () {}Debido a que planeo escribir un artículo que introduzca específicamente el alcance, no lo explicaré en detalle aquí.
Expresiones de funciones
Para las declaraciones de la función, el nombre de la función es necesario, pero para las expresiones de la función, es opcional. Por lo tanto, aparecen expresiones de función anónima y expresiones de funciones nombradas. como sigue:
Declaración de funciones: función functionName () {}
Declaración de funciones: función functionName [opcional] () {}
Entonces sé que si no hay un nombre de función, debe ser una expresión de función, pero ¿cómo debemos juzgar si hay un nombre de función?
JavaScript especifica que si todo el cuerpo de la función es parte de una expresión, entonces es una expresión de función, de lo contrario es una declaración de función. La siguiente es la expresión:
var fuc = foo () {}Damos algunos ejemplos de expresión más extremos:
! function foo () {} true && function foo () {}Las declaraciones anteriores son solo para distinguir las expresiones de funciones, y generalmente no están escritas así. Luego use un ejemplo de comparación para ver el efecto:
foo1 (); // foo1 no está definido foo2 (); // funciona porque foo2 se creó antes de que este código se ejecute!
Expresiones de funciones anónimas
var foo = function () {};El ejemplo anterior asigna una función anónima a la variable FOO.
foo; // 'Undefined'foo (); // Esto plantea un typeErRorvar foo = function () {};Dado que VAR es una declaración, la variable FOO se iba (promovida) aquí, por lo que cuando se ejecuta el programa, la variable FOO se puede llamar.
Sin embargo, dado que la declaración de asignación solo entra en vigencia en tiempo de ejecución, el valor de la variable FOO no está definido.
Expresiones de funciones nombradas
Otra cosa de la que hablar es la asignación de funciones con nombre.
var foo = function bar () {bar (); // funciona}; bar (); // referenceErrorAquí, la barra de funciones con nombre se asigna a la variable FOO, por lo que es invisible fuera de la declaración de función, pero aún se puede llamar dentro de la función de la barra. Esto se debe a que el mecanismo de JavaScript para nombrar funciones, el nombre de la función siempre es válido en el alcance dentro de la función.