Elevación se refiere al proceso en JavaScript donde se realizan declaraciones antes de la ejecución. Las declaraciones de variables y funciones se procesan primero. Como resultado, incluso si se hace referencia a una variable antes de su declaración, no causará un error, sino que devolverá un valor indefinido. Para las declaraciones de funciones, se eleva la función completa, lo que significa que se puede usar antes de definirla en el código. Este proceso coloca las declaraciones en la pila antes de que comience la ejecución.
Las variables declaradas con var se inicializan como indefinidas durante el levantamiento.
Las declaraciones de funciones están completamente activas y se pueden invocar antes de escribirlas en el código.
El proceso de elevación garantiza que estas declaraciones sean reconocidas en la pila de ejecución, independientemente de su posición en el código.
Es importante tener en cuenta que solo se elevan las declaraciones, no las asignaciones. Las tareas permanecen en el mismo lugar donde las escribiste.
Nota: Aquellos que dicen que durante la elevación el código se mueve hacia arriba en realidad están equivocados. El código nunca sube.
console.log(myVariable); // undefined var myVariable = 10;
Este código realiza dos acciones simultáneamente. Primero, declara la variable myVariable y la eleva al alcance, pero su valor aún no está definido. Por lo tanto, el comando console.log muestra el valor no inicializado como indefinido. Después de eso, se asigna el valor 10 a myVariable.
Sin embargo, si intentas cambiarlo, no tendrá ningún efecto en la declaración anterior. Por ejemplo:
console.log(myVariable); // ReferenceError: myVariable is not defined myVariable = 10;
Aquí no hemos declarado la variable myVariable, por lo que arroja un ReferenceError antes de intentar cambiarla.
En resumen, JavaScript lee todo el código primero y luego saca todas las declaraciones mientras mantiene las asignaciones en sus posiciones originales. Este proceso se conoce como izado.
Tanto var como let se activan en JavaScript, pero su comportamiento es ligeramente diferente.
Cuando declaras una variable usando var, su declaración se eleva fuera del alcance y puedes acceder a la variable antes de su declaración, pero tendrá el valor indefinido hasta que se le asigne un valor.
console.log(myVariable); // undefined var myVariable = 10;
En el código anterior, la declaración var myVariable se eleva fuera del alcance, pero la asignación myVariable = 10 se deja en su lugar. Por lo tanto, la instrucción console.log genera un valor indefinido porque la variable existe pero aún no se le ha asignado un valor.
Por otro lado, cuando declaras una variable usando let, el comportamiento de elevación es un poco diferente. La declaración de la variable se eleva, pero no se puede acceder a la variable antes de su declaración. Esto se conoce como la "zona muerta temporal". Si intenta acceder a una variable let antes de su declaración, obtendrá un ReferenceError.
console.log(myVariable); // ReferenceError: myVariable is not defined let myVariable = 10;
En este caso, se activa la declaración, pero no se puede acceder a la variable antes de su declaración. Por lo tanto, console.logstatement arroja un ReferenceError porque la variable aún no se ha definido.
Aquí, básicamente, en el caso de let, incluso si se eleva, el valor de la variable permanece indefinido. Porque no hay espacio en la memoria para esa variable. Por este motivo no se puede hacer referencia a esa dirección. Debido a que no hay una dirección de myVariable = 10 en la memoria, se genera un error de referencia.
La palabra clave const le permite crear constantes, que son variables que no se pueden reasignar una vez que se les asigna un valor.
const PI = 3.142; PI = 22/7; // Attempt to reassign the value of PI console.log(PI); // Output: TypeError: Assignment to constant variable
En este ejemplo, definimos PI como una constante con un valor inicial de 3,142. Cuando intentamos reasignar un nuevo valor a PI, se genera un TypeError porque las constantes no se pueden reasignar.
const PI; console.log(PI); // Output: SyntaxError: Missing initializer in const declaration PI = 3.142;
En este caso, declaramos un PI constante sin inicializarlo. Este código arroja un error de sintaxis porque las constantes deben declararse e inicializarse al mismo tiempo.
function getCircumference(radius) { console.log(circumference); circumference = PI * radius * 2; const PI = 22/7; } getCircumference(2); // ReferenceError: circumference is not defined
Aquí, dentro de la función getCircumference, intentamos acceder a la circunferencia antes de su declaración. Lanza un ReferenceError porque la variable aún no está definida.
Cuando se usa const, es necesario declarar e inicializar la variable antes de usarla.
En general, var y let se activan en JavaScript, pero su comportamiento y el concepto de zona muerta temporal se aplican solo a las variables let. const crea constantes que no se pueden reasignar una vez inicializadas.
function hoisted() { a = 20; var b = 100; } hoisted(); console.log(a); // 20 // can be accessed as a global variable outside the hoisted() function. console.log(b); // As it is declared, it is bound within the bounds of the hoisted() function. We cannot print it outside the hoisted() function. output: ReferenceError: b is not defined
Podemos ver que la declaración de la variable de mensaje var en el alcance de la función hoist() va a la parte superior de la función.
Para evitar este problema, nos aseguraremos de declarar la variable antes de usarla.
En los dos ejemplos que proporcionó, el resultado no estará definido.
function hoist() { console.log(message); var message = 'Hoisting is all the rage!'; } hoist(); // Output: undefined
function hoist() { var message; console.log(message); message = 'Hoisting is all the rage!'; } hoist(); // Output: undefined
En ambos casos, la salida no está definida porque las variables se elevan a la parte superior de sus respectivos alcances, pero su asignación ocurre después en el orden original del código.
Las expresiones de función no se elevan y arrojan un TypeError porque la expresión se trata como una variable y no como una función.
expression(); // Output: "TypeError: expression is not a function var expression = function() { console.log('Will this work?'); };
Por su nombre, es una variante restringida de JavaScript que no tolerará el uso de variables antes de que sean declaradas. Ejecutando nuestro código en modo estricto:
Elimina algunos errores silenciosos de JavaScript cambiándolos a errores de lanzamiento explícitos.
Corrige errores que dificultan que los motores JavaScript realicen optimizaciones.
Es posible que no puedas declarar la variable, usa estricto, lo que te detuvo al generar un error de referencia.
'use strict'; console.log(hoist); // Output: ReferenceError: hoist is not defined hoist = 'Hoisted';
Es importante comprender el uso de elevación en JavaScript al declarar variables y funciones; a medida que se explique la elevación, comprenderá cómo se maneja realmente el código JavaScript.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3