Saltar al contenido

¿Por qué puedo usar una función antes de que esté definida en JavaScript?

Solución:

los function La declaración es mágica y hace que su identificador se vincule antes de que se ejecute cualquier cosa en su bloque de código *.

Esto difiere de una tarea con un function expresión, que se evalúa en orden descendente normal.

Si cambió el ejemplo para decir:

var internalFoo = function() { return true; };

dejaría de funcionar.

La declaración de la función es sintácticamente bastante separada de la expresión de la función, aunque parecen casi idénticas y pueden ser ambiguas en algunos casos.

Esto está documentado en el estándar ECMAScript, sección 10.1.3. Desafortunadamente, ECMA-262 no es un documento muy legible incluso para los estándares.

*: la función, bloque, módulo o script que lo contiene.

Se llama LEVANTAMIENTO: invocar (llamar) una función antes de que se haya definido.

Dos tipos diferentes de funciones sobre las que quiero escribir son:

Funciones de expresión y funciones de declaración

  1. Funciones de expresión:

    Las expresiones de función se pueden almacenar en una variable, por lo que no necesitan nombres de función. También se nombrarán como una función anónima (una función sin nombre).

    Para invocar (llamar) estas funciones, siempre necesitan un nombre de la variable. Este tipo de función no funcionará si se llama antes de que se haya definido, lo que significa que no se realiza la elevación aquí. Siempre debemos definir primero la función de expresión y luego invocarla.

    let lastName = function (family) {
     console.log("My last name is " + family);
    };
    let x = lastName("Lopez");
    

    Así es como puede escribirlo en ECMAScript 6:

    lastName = (family) => console.log("My last name is " + family);
    
    x = lastName("Lopez");
    
  2. Funciones de declaración:

    Las funciones declaradas con la siguiente sintaxis no se ejecutan inmediatamente. Se “guardan para su uso posterior” y se ejecutarán más tarde, cuando se invoquen (invoquen). Este tipo de función funciona si la llama ANTES o DESPUÉS de donde se ha definido. Si llama a una función de declaración antes de que se haya definido, la elevación funciona correctamente.

    function Name(name) {
      console.log("My cat's name is " + name);
    }
    Name("Chloe");
    

    Ejemplo de elevación:

    Name("Chloe");
    function Name(name) {
       console.log("My cat's name is " + name);
    }
    

El navegador lee su HTML de principio a fin y puede ejecutarlo a medida que se lee y analiza en fragmentos ejecutables (declaraciones de variables, definiciones de funciones, etc.). Pero en cualquier momento solo puede usar lo que se ha definido en el script antes de ese punto.

Esto es diferente de otros contextos de programación que procesan (compilan) todo su código fuente, quizás lo vinculan con cualquier biblioteca que necesite para resolver referencias y construyen un módulo ejecutable, en cuyo punto comienza la ejecución.

Su código puede hacer referencia a objetos con nombre (variables, otras funciones, etc.) que se definen más adelante, pero no puede ejecutar el código de referencia hasta que todas las piezas estén disponibles.

A medida que se familiarice con JavaScript, se volverá íntimamente consciente de su necesidad de escribir las cosas en la secuencia adecuada.

Revisión: Para confirmar la respuesta aceptada (arriba), use Firebug para recorrer la sección del script de una página web. Verá que pasa de una función a otra, visitando solo la primera línea, antes de que realmente ejecute cualquier código.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *