"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > ⚠️ Les dangers cachés de l'utilisation de `var` en JavaScript : pourquoi il est temps de passer à autre chose

⚠️ Les dangers cachés de l'utilisation de `var` en JavaScript : pourquoi il est temps de passer à autre chose

Publié le 2024-11-07
Parcourir:694

⚠️ The Hidden Dangers of Using `var` in JavaScript: Why It’s Time to Move On

Le mot-clé var est le moyen par défaut de déclarer des variables en JavaScript depuis de nombreuses années. Cependant, il présente plusieurs bizarreries et pièges qui peuvent conduire à un comportement inattendu dans votre code. Les alternatives modernes comme let et const résolvent bon nombre de ces problèmes, ce qui en fait le choix privilégié pour déclarer des variables dans la plupart des cas.


1️⃣ Levage : var déclare les variables avant de vous en rendre compte !

 ? Explication:

En JavaScript, les déclarations var sont hissées au sommet de leur portée, ce qui signifie qu'elles sont initialisées comme indéfinies même si la déclaration apparaît plus tard dans le code. Cela peut entraîner un comportement déroutant et conduire à des bugs difficiles à détecter.

 ? Points clés :

  •  ? Le levage en action : Les déclarations de variables sont déplacées vers le haut de la portée, mais leurs affectations ne le sont pas.
  •  ? Valeurs inattendues non définies : Les variables peuvent être utilisées avant qu'une valeur ne leur soit attribuée, ce qui entraîne des résultats involontaires non définis.

 ? Exemple:

console.log(myVar);  // undefined (hoisted but not initialized)
var myVar = 10;
console.log(myVar);  // 10

 ? Commentaire : La variable myVar est hissée en haut de la portée mais est initialement indéfinie, ce qui peut prêter à confusion dans votre code.

 ? Réparer:

  •  ? Utilisez let ou const : Ces mots-clés ne sont pas hissés de la même manière que var, ce qui permet d'éviter ce problème.

 ? Exemple de correctif :

console.log(myLet);  // ReferenceError: myLet is not defined
let myLet = 10;
console.log(myLet);  // 10

 ? Commentaire : L'utilisation de let empêche l'accès à la variable avant qu'elle ne soit déclarée, réduisant ainsi la confusion et les bogues potentiels.


2️⃣ Portée de la fonction par rapport à la portée du bloc : var peut fuir des blocs !

 ? Explication:

L’un des défauts majeurs de var est qu’il est limité à une fonction et non à un bloc. Cela signifie que les variables déclarées à l'intérieur des boucles, des instructions if ou d'autres blocs ne sont pas confinés à ce bloc, mais sont accessibles en dehors de celui-ci, ce qui peut entraîner des bugs.

 ? Points clés :

  •  ? Portée de la fonction : var est limité à la fonction la plus proche, même si elle est déclarée à l'intérieur d'un bloc comme une boucle ou une instruction if.
  •  ? Fuite de variables : Cela peut entraîner une fuite involontaire de variables hors des blocs, provoquant un comportement imprévisible.

 ? Exemple:

if (true) {
  var blockVar = "I’m accessible outside this block";
}
console.log(blockVar);  // "I’m accessible outside this block"

 ? Commentaire : Bien que blockVar ait été déclaré à l'intérieur du bloc if, il est toujours accessible en dehors du bloc car var est limité à une fonction et non à un bloc.

 ? Réparer:

  •  ? Utilisez let ou const : Ces mots-clés sont de portée bloc, ce qui signifie qu'ils ne sont accessibles que dans le bloc où ils sont définis.

 ? Exemple de correctif :

if (true) {
  let blockLet = "I’m only accessible inside this block";
}
console.log(blockLet);  // ReferenceError: blockLet is not defined

 ? Commentaire : L'utilisation de let ou const garantit que les variables restent confinées à leurs blocs respectifs, empêchant ainsi les fuites de portée.


3️⃣ Problèmes de redéclaration : var vous permet de déclarer la même variable deux fois !

 ? Explication:

Avec var, vous pouvez accidentellement redéclarer la même variable dans la même portée, ce qui peut écraser la valeur précédente. Cela peut conduire à des bogues involontaires, en particulier dans les bases de code plus volumineuses où les noms de variables peuvent être réutilisés par erreur.

 ? Points clés :

  •  ? Redéclarer des variables : var vous permet de redéclarer une variable dans la même portée, en écrasant potentiellement les valeurs existantes.
  •  ? Écrasements involontaires : Cela peut provoquer des bogues difficiles à détecter, en particulier dans les fonctions volumineuses ou complexes.

 ? Exemple:

var name = "Alice";
var name = "Bob";  // No error, overwrites the previous value
console.log(name);  // "Bob"

 ? Commentaire : La deuxième déclaration de name écrase la première, provoquant potentiellement des bugs dans le code.

 ? Réparer:

  •  ? Utilisez let ou const : Ces mots-clés vous empêchent de redéclarer des variables dans la même portée, réduisant ainsi le risque d'écrasements involontaires.

 ? Exemple de correctif :

let name = "Alice";
let name = "Bob";  // SyntaxError: Identifier 'name' has already been declared

 ? Commentaire : L'utilisation de let ou const vous aide à éviter de redéclarer des variables et garantit que votre code reste prévisible.


4️⃣ var dans les boucles : potentiel de bugs dans le code asynchrone

 ? Explication:

Lors de l'utilisation de var dans des boucles, la valeur de la variable peut changer de manière inattendue, en particulier lorsque vous travaillez avec du code asynchrone. Étant donné que var est limité à une fonction et non à un bloc, la variable de boucle peut contenir une valeur inattendue lorsqu'elle est accessible dans des rappels asynchrones.

 ? Points clés :

  •  ? Variables de boucle : Les variables déclarées avec var à l'intérieur des boucles ne sont pas confinées au bloc de boucle, ce qui entraîne des bogues potentiels lors d'un accès ultérieur.
  • Problèmes asynchrones : Cela peut provoquer des bogues dans les opérations asynchrones telles que setTimeout ou promises, où la variable de boucle peut avoir une valeur inattendue.

 ? Exemple:

for (var i = 0; i  console.log(i), 1000);  // Prints: 3, 3, 3 (unexpected)
}

 ? Commentaire : Étant donné que var n'a pas une portée de bloc, la variable de boucle i est partagée entre toutes les itérations et sa valeur finale (3) est utilisée dans chaque rappel setTimeout.

 ? Réparer:

  • Utilisez let : Le mot-clé let a une portée de bloc, garantissant que chaque itération de la boucle obtient sa propre valeur indépendante de la variable de boucle.

 ? Exemple de correctif :

for (let i = 0; i  console.log(i), 1000);  // Prints: 0, 1, 2 (as expected)
}

 ? Commentaire : L'utilisation de let crée une nouvelle instance de i pour chaque itération, corrigeant le problème de rappel asynchrone et garantissant que les valeurs correctes sont imprimées.


5️⃣ var et fermetures : une source de confusion

 ? Explication:

Les fermetures peuvent conduire à un comportement inattendu lorsqu'elles sont combinées avec var. Étant donné que var est limité à une fonction, sa valeur peut changer d'une manière inattendue lorsqu'une fermeture la capture.

 ? Points clés :

  •  ? Fermetures en JavaScript : Une fermeture est une fonction qui se souvient de sa portée environnante même après la fin de l'exécution de la fonction externe.
  •  ? Problèmes de variables partagées : Lorsque var est utilisé dans une fermeture, la variable capturée peut être partagée entre toutes les fermetures, entraînant un comportement inattendu.

 ? Exemple:

function createFunctions() {
  var funcs = [];
  for (var i = 0; i 



 ? Commentaire : Toutes les fermetures capturent la même valeur i car var est limitée à une fonction, ce qui conduit à des résultats inattendus.

 ? Réparer:

  •  ? Utilisez let : En utilisant let, chaque fermeture capture une nouvelle instance de la variable de boucle, résolvant ainsi le problème.

 ? Exemple de correctif :

function createFunctions() {
  var funcs = [];
  for (let i = 0; i 



 ? Commentaire : Avec let, chaque fermeture obtient sa propre copie de i, résolvant le problème et garantissant que les valeurs attendues sont imprimées.


 ? Conclusion : il est temps de dire au revoir à var

Bien que var soit la manière originale de déclarer des variables en JavaScript, il présente plusieurs défauts qui en font un mauvais choix dans le développement JavaScript moderne. L'introduction de let et const offre une meilleure portée, réduit le risque de bugs et rend votre code plus prévisible. Pour écrire du JavaScript plus propre et plus maintenable, il est temps de passer de var à let et const.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/dharamgfx/the-hidden-dangers-of-using-var-in-javascript-why-its-time-to-move-on-2jgm?1S'il y en a infraction, veuillez contacter [email protected] pour supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3