JavaScript Levage


Exemple

Qu'est-ce que le levage?

Le levage est un mécanisme qui déplace toutes les déclarations de variables et de fonctions au sommet de leur portée. Cependant, les affectations de variables se produisent toujours là où elles étaient à l'origine.

Par exemple, considérez le code suivant:

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

Le code ci-dessus est le même que:

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

Notez que le undefined ci-dessus n'est pas le même que celui not defined résultant de l'exécution:

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

Un principe similaire s'applique aux fonctions. Lorsque des fonctions sont affectées à une variable (c'est-à-dire une expression de fonction ), la déclaration de variable est hissée pendant que l'affectation reste au même endroit. Les deux extraits de code suivants sont équivalents.

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;
}

Lors de la déclaration des instructions de fonction , un scénario différent se produit. Contrairement aux instructions de fonction, les déclarations de fonction sont placées au sommet de leur portée. Considérez le code suivant:

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

Le code ci-dessus est identique à l'extrait de code suivant en raison du levage:

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

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

Voici quelques exemples de ce qui est ou non:

// 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();

Limites du levage

L'initialisation d'une variable ne peut pas être levée ou In simple JavaScript déclenche des déclarations non initialisées.

Par exemple: Les scripts ci-dessous donneront des sorties différentes.

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

Cela vous donnera une sortie de 6. Mais cela ...

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

Cela vous donnera une sortie de NaN. Puisque nous initialisons la valeur de y, le levage de JavaScript ne se produit pas, donc la valeur de y sera indéfinie. Le JavaScript considérera que y n'est pas encore déclaré.

Le deuxième exemple est donc le même que ci-dessous.

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

Cela vous donnera une sortie de NaN.

entrer la description de l'image ici