Maison > interface Web > js tutoriel > le corps du texte

Levage en javascript ?

PHPz
Libérer: 2024-07-17 10:40:29
original
708 Les gens l'ont consulté

Hoisting in javascript ?

« Le levage est un comportement en javascript où toutes les déclarations de variables et de fonctions sont déplacées vers le haut de la portée contenant pendant la phase de compilation avant l'exécution du code »

Vous avez peut-être rencontré cette définition partout mais « c'est un mythe selon lequel toutes les déclarations de variables et de fonctions sont physiquement en haut du code » Ce n'est pas vrai !

Mais à la place, en hissant toutes les déclarations de variables et de fonctions, la mémoire est déjà attribuée avant l'exécution du code dans la compilation et reste exactement là où nous les avons tapées.

Alors, exactement, comment var/let/const et les fonctions sont hissées.

Voici quelques exemples :

console.log(a) // undefined
console.log(b) // ReferenceError
console.log(c) // ReferenceError

var a = 10;
let b = 20;
const c = 30;
Copier après la connexion

La variable déclarée avec var sera levée et pendant le temps de compilation, la variable var assignée en mémoire avec une valeur indéfinie, c'est pourquoi lorsque nous consolez var avant la déclaration, nous obtenons undéfini

La variable déclarée avec const/let sera également levée mais pas initialisée avec undefined . nous ne pouvons pas y accéder avant la déclaration, sinon nous recevons une ReferenceError. Cela est dû à la zone morte temporelle, une heure où les variables existent mais non initialisées.

Mais qu'en est-il de la fonction

Eh bien, cela dépend de la manière dont nous déclarons nos fonctions. Voir ci-dessous.

greet1();
greet2();
greet3();
greet4();

//function declaration is full hoisted
function greet1(){
    console.log("greet1");
}

// TypeError: greet2 is not a function
var greet2 = function(){
    console.log("greet2");
}

 // ReferenceError: Cannot access 'greet3' before initialization
let greet3 = function(){
    console.log("greet2");
}

// ReferenceError: Cannot access 'greet4' before initialization
const greet4 = function(){
    console.log("greet2");
}
Copier après la connexion

La déclaration de fonction traditionnelle est entièrement levée, ce qui signifie que nous pouvons l'appeler dans tout le code.

mais avec l'expression de fonction, nous ne pouvons pas la faire avant qu'elle n'ait été déclarée. C'est pourquoi trois fonctions déclarées avec des variables nous donnent une erreur. Nous avons donc deux options : soit nous changeons l'expression de fonction en déclaration de fonction, soit nous appelons la fonction après les déclarations.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal