Il fut un temps où j'utilisais et comprenais l'utilisation pratique de let, const et var en JavaScript, mais l'expliquer avec des mots était un défi. Si vous vous trouvez dans une situation similaire, les points clés sur lesquels se concentrer sont les différences de portée, de levage, de réinitialisation et de réaffectation.
Portée :
function varExample() { if (true) { var x = 10; // x is function-scoped } console.log(x); // Outputs: 10 } varExample(); if (true) { var y = 20; // y is globally scoped because it's outside a function } console.log(y); // Outputs: 20
function letExample() { if (true) { let x = 10; // x is block-scoped console.log(x); // Outputs: 10 } console.log(x); // ReferenceError: x is not defined } letExample(); if (true) { let y = 20; // y is block-scoped console.log(y); // Outputs: 20 } console.log(y); // ReferenceError: y is not defined
function constExample() { if (true) { const x = 10; // x is block-scoped console.log(x); // Outputs: 10 } console.log(x); // ReferenceError: x is not defined } constExample(); if (true) { const y = 20; // y is block-scoped console.log(y); // Outputs: 20 } console.log(y); // ReferenceError: y is not defined
Levage
Le levage, c'est comme configurer un espace de travail avant de commencer une tâche. Imaginez que vous êtes dans une cuisine et que vous vous préparez à préparer un repas. Avant de commencer à cuisiner, vous placez tous vos ingrédients et ustensiles sur le comptoir pour qu'ils soient à portée de main.
En programmation, lorsque vous écrivez du code, le moteur JavaScript parcourt votre code avant de l'exécuter et configure toutes les variables et fonctions en haut de leur portée. Cela signifie que vous pouvez utiliser des fonctions et des variables avant de les déclarer dans votre code.
Tous les trois (var, let et const) sont bel et bien hissés. Cependant, la différence réside dans la manière dont ils sont initialisés lors du processus de levage.
var est hissé et initialisé avec undefined.
console.log(myVar); // Outputs: undefined var myVar = 10;
console.log(myLet); // ReferenceError: Cannot access 'myLet' before initialization let myLet = 10;
console.log(myConst); // ReferenceError: Cannot access 'myConst' before initialization const myConst = 20;
Réaffectation et réinitialisation :
var x = 10; x = 20; // Reassignment console.log(x); // Outputs: 20 var x = 30; // Reinitialization console.log(x); // Outputs: 30
let y = 10; y = 20; // Reassignment console.log(y); // Outputs: 20 let y = 30; // SyntaxError: Identifier 'y' has already been declared
const z = 10; z = 20; // TypeError: Assignment to constant variable. const z = 30; // SyntaxError: Identifier 'z' has already been declared
const obj = { a: 1 }; obj.a = 2; // Allowed, modifies the property console.log(obj.a); // Outputs: 2 obj = { a: 3 }; // TypeError: Assignment to constant variable.
const arr = [1, 2, 3]; arr[0] = 4; // Allowed, modifies the element console.log(arr); // Outputs: [4, 2, 3] arr = [5, 6, 7]; // TypeError: Assignment to constant variable.
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!