JavaScript | Izar

En JavaScript, Hoisting es el comportamiento predeterminado de mover todas las declaraciones en la parte superior del ámbito antes de la ejecución del código. Básicamente, nos da la ventaja de que no importa dónde se declaren las funciones y las variables, se mueven a la parte superior de su alcance, independientemente de si su alcance es global o local. 

Nos permite llamar funciones incluso antes de escribirlas en nuestro código. 

Nota: JavaScript solo eleva las declaraciones, no las inicializaciones.

JavaScript asigna memoria para todas las variables y funciones definidas en el programa antes de la ejecución.

Entendamos qué es exactamente esto: 
La siguiente es la secuencia en la que ocurren la declaración e inicialización de variables. 

Declaración –> Inicialización/Asignación –> Uso 

// Variable lifecycle
let a;        // Declaration
a = 100;      // Assignment
console.log(a);  // Usage

Sin embargo, dado que JavaScript nos permite declarar e inicializar nuestras variables simultáneamente, este es el patrón más utilizado:  

let a = 100;

Nota: Recuerde siempre que, en segundo plano, Javascript primero declara la variable y luego la inicializa. También es bueno saber que las declaraciones de variables se procesan antes de ejecutar cualquier código. 

Sin embargo, en javascript, las variables no declaradas no existen hasta que se ejecuta el código que las asigna. Por lo tanto, asignar un valor a una variable no declarada la crea implícitamente como una variable global cuando se ejecuta la asignación. Esto significa que todas las variables no declaradas son variables globales.

Javascript

// hoisting
function codeHoist(){
    a = 10;
    let b = 50;
}
codeHoist();
 
console.log(a); // 10
console.log(b); // ReferenceError : b is not defined

Producción: 

Explicación: en el ejemplo de código anterior, creamos una función llamada codeHoist() y allí tenemos una variable que no declaramos usando let/var/const y una variable let b. JavaScript asigna el alcance global a la variable no declarada, por lo que podemos imprimirla fuera de la función, pero en el caso de la variable b, el alcance está limitado y no está disponible fuera y obtenemos un error de referencia.

Nota: Hay una diferencia entre ReferenceError y error indefinido. Un error indefinido ocurre cuando tenemos una variable que no está definida o definida explícitamente como tipo indefinido. Se lanza ReferenceError al intentar acceder a una variable no declarada previamente. 

ES5

Cuando hablamos de ES5, la variable que nos viene a la mente es var. Elevar con var es algo diferente en comparación con let/const. Hagamos uso de var y veamos cómo funciona la elevación:  

Javascript

// var code (global)
console.log(name); // undefined
var name = 'Mukul Latiyan';

Producción: 

Explicación: en el código anterior, intentamos consolar el nombre de la variable que se declaró y asignó más tarde que usarlo, el compilador nos da undefined que no esperábamos, ya que deberíamos haber obtenido ReferenceError ya que estábamos tratando de usar la variable de nombre incluso antes declarándolo 

Pero el intérprete ve esto de manera diferente, el código anterior se ve así:  

Javascript

//how interpreter sees the above code
var name;
console.log(name); // undefined
name = 'Mukul Latiyan';

Producción: 

Variable de ámbito de función

Veamos cómo se elevan las variables con ámbito de función.  

Javascript

//function scoped
function fun(){
    console.log(name);
    var name = 'Mukul Latiyan';
}
fun(); // undefined

Producción: 

No hay diferencia aquí, ya que en comparación con el código en el que declaramos la variable globalmente, nos quedamos sin definir ya que el código visto por el intérprete es: 

Javascript

//function scoped
function fun(){
    var name;
    console.log(name);
    name = 'Mukul Latiyan';
}
fun(); // undefined

Producción: 

Para evitar este escollo, podemos asegurarnos de declarar y asignar la variable al mismo tiempo, antes de usarla . Algo como esto:  

Javascript

//in order to avoid it
function fun(){
    var name = 'Mukul Latiyan';
    console.log(name); // Mukul Latiyan
}
fun();

Producción: 

ES6

Háganos 
saber que las variables declaradas con las palabras clave let tienen un alcance de bloque y no un alcance de función y, por lo tanto, no hay ningún tipo de problema cuando se trata de izar. 

Ejemplo:  

Javascript

//let example(global)
console.log(name);
let name='Mukul Latiyan'; // ReferenceError: name is not defined

Producción: 

Como antes, para la palabra clave var, esperamos que la salida del registro no esté definida. Sin embargo, dado que es6 let no nos toma con amabilidad el uso de variables no declaradas, el intérprete arroja explícitamente un error de referencia. Esto asegura que siempre declaramos nuestra variable primero. 

const se comporta de manera similar a let cuando se trata de izar.
 

Publicación traducida automáticamente

Artículo escrito por support3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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