Saltar al contenido

Javascript: ¿diferencia entre una declaración y una expresión?

Esta es el arreglo más completa que te podemos brindar, pero primero estúdiala pausadamente y valora si es compatible a tu trabajo.

Solución:

¿Son todas las declaraciones también expresiones?

“Siempre que JavaScript espera una declaración, también puede escribir una expresión. Este enunciado se denomina enunciado de expresión. Lo contrario no se cumple: no se puede escribir una declaración donde JavaScript espera una expresión. Por ejemplo, una instrucción if no puede convertirse en el argumento de una función “.

Esto proviene de una publicación reciente de Axel Rauschmayer sobre este tema: Expresiones versus declaraciones en JavaScript

Espero eso ayude.

Según MDN:

Una expresión es cualquier unidad de código válida que se resuelve en un valor.

Como tal, cualquier cosa que pueda usarse como rvalue es una expresión.

El criterio es no si existen efectos secundarios. Las expresiones definitivamente pueden tener efectos secundarios. P.ej a=2 es una expresión ya que tiene un valor (2) y también asigna un valor a una variable. Por eso puedes hacer cosas como:

let a;
let b = 1 + (a = 2); // a is now 2 and b is 3

Es posible que el mismo bloque de código (textual) se considere una expresión y una declaración en función del contexto. Por ejemplo, el fragmento de texto function f() es una expresión en la línea 1 y una declaración en la línea 2 en el siguiente código:

let g = function f() ;
function f() ;

Entonces, si algo es una expresión o una declaración no se puede (en el caso general) determinarse mirando un fragmento de código textual fuera de contexto; más bien es una propiedad de un nodo en un árbol de sintaxis y se puede decidir solo después de que el código sea analizado (mental o realmente).

Además, y quizás lo más importante, las declaraciones de función (también conocidas como declaraciones de función) dentro de una función f forman parte del contexto de ejecución que se crea cuando la función f se invoca. Sin embargo, las expresiones de función no no forman parte de ese contexto de ejecución.

Un efecto de esto que se cita a menudo es que las declaraciones de función se “elevan” mientras que las expresiones de función no.

También se puede observar experimentalmente un efecto más sutil en recursiones profundas dado que las declaraciones de función ocupan espacio en el contexto de ejecución, mientras que las expresiones de función no lo hacen. Por ejemplo, el siguiente código usa la recursividad infinita de una función f. Función f en el primer caso incluye una expresión de función en su interior, en el segundo caso incluye la declaración de función equivalente:

// Function Expression

    let i = 0;
    try 

        function f () 
            i++;
            (function g() )(); // this is an expression
            f();
        

        f();

     catch (err) 
        console.log(`Function Expressions case: depth of $i reached. Error: $err.name`);
    

// Function Declaration

    let i = 0;
    try 
        function f () 
            i++;
            function g() ; // this is a statement
            g();
            f();
        

        f();

     catch (err) 
        console.log(`Functions Declarations case: depth of $i reached. Error: $err.name`);
    

En mi máquina obtengo constantemente lo siguiente (en node.js):

Function Expressions case: depth of 17687 reached. Error: RangeError
Functions Declarations case: depth of 15476 reached. Error: RangeError

… Lo cual es consistente con el hecho de que las declaraciones de funciones aumentan la cantidad de espacio necesario para mantener un contexto de ejecución y, por lo tanto, consumen espacio de pila un poco más rápido y, por lo tanto, disminuyen ligeramente la profundidad máxima de recursividad.

La expresión produce o evalúa algún valor.

Ejemplos de expresiones:
new Date() produce un nuevo objeto Date sin ningún efecto secundario.
[1,2,3] produce un nuevo array sin ningún efecto secundario.
5+6 produce un nuevo valor 11. Simplemente produce un nuevo valor sin ningún efecto secundario.

La declaración produce algún comportamiento o hace algo y también tiene algún efecto secundario. Según el efecto secundario, las declaraciones se pueden clasificar.

x=5; es una declaración y aquí el efecto secundario es la asignación o cambio en x.

setTimeout() – El inicio del temporizador es el efecto secundario.

Las declaraciones generalmente están separadas por punto y coma.

La declaración de expresión es la expresión que tiene algún efecto secundario o simplemente “expresión con efecto secundario”.

Ejemplos de declaración de expresión:

x+=6; es la expresión compleja (grupo de expresiones primarias) que está realizando una asignación que es un efecto secundario, la llamada declaración de expresión.

delete a[2];

Acuérdate de que tienes la capacidad de decir si te ayudó.

¡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 *