JavaScript Levantamiento


Ejemplo

¿Qué es la elevación?

La elevación es un mecanismo que mueve todas las declaraciones de variables y funciones a la parte superior de su alcance. Sin embargo, las asignaciones de variables todavía ocurren donde estaban originalmente.

Por ejemplo, considere el siguiente código:

console.log(foo);  // → undefined
var foo = 42;
console.log(foo);  // → 42

El código anterior es el mismo que:

var foo;             // → Hoisted variable declaration
console.log(foo);    // → undefined
foo = 42;            // → variable assignment remains in the same place
console.log(foo);    // → 42

Tenga en cuenta que debido a la elevación de lo anterior, undefined no es lo mismo que el not defined resultante de la ejecución:

console.log(foo);    // → foo is not defined 

Un principio similar se aplica a las funciones. Cuando las funciones se asignan a una variable (es decir, una expresión de función ), la declaración de la variable se eleva mientras la asignación permanece en el mismo lugar. Los siguientes dos fragmentos de código son equivalentes.

console.log(foo(2, 3));     // → foo is not a function

var foo = function(a, b) {
    return a * b;
}
var foo;
console.log(foo(2, 3));     // → foo is not a function
foo = function(a, b) {
    return a * b;
}

Al declarar declaraciones de funciones , se produce un escenario diferente. A diferencia de las declaraciones de función, las declaraciones de función se elevan a la parte superior de su alcance. Considere el siguiente código:

console.log(foo(2, 3));  // → 6
function foo(a, b) {
    return a * b;
}

El código anterior es el mismo que el siguiente fragmento de código debido a la elevación:

function foo(a, b) {
    return a * b;
}

console.log(foo(2, 3));  // → 6

Aquí hay algunos ejemplos de lo que es y lo que no es la elevación:

// Valid code:
foo();

function foo() {}

// Invalid code:
bar();                     // → TypeError: bar is not a function
var bar = function () {};


// Valid code:
foo();
function foo() {
    bar();
}
function bar() {}


// Invalid code:
foo();
function foo() {
    bar();                // → TypeError: bar is not a function
}
var bar = function () {};


// (E) valid:
function foo() {
    bar();
}
var bar = function(){};
foo();

Limitaciones del Levantamiento

La inicialización de una variable no puede ser Elevada o En JavaScript simple. Las declaraciones de Ascensores no se inicializan.

Por ejemplo: Los siguientes scripts darán diferentes salidas.

var x = 2; 
var y = 4; 
alert(x + y);

Esto te dará una salida de 6. Pero esto ...

var x = 2; 
alert(x + y);
var y = 4; 

Esto te dará una salida de NaN. Dado que estamos inicializando el valor de y, el Aumento de JavaScript no está ocurriendo, por lo que el valor de y no estará definido. El JavaScript considerará que y aún no está declarado.

Así que el segundo ejemplo es el mismo que el de abajo.

var x = 2; 
var y;
alert(x + y);
y = 4; 

Esto te dará una salida de NaN.

introduzca la descripción de la imagen aquí