web-dev-qa-db-fra.com

Quand dois-je utiliser let et var?

EDIT: Veuillez lire la question! Je connais déjà la différence. Ce n'est pas un doublon.

Évidemment, en ce moment, je devrais toujours utiliser la clé var Word car let n'est pas pris en charge dans tout.

Lorsque le mot clé let a un meilleur support (disons, j'écris une application Node dans quelques années qui utilise Harmony), quand dois-je utiliser le mot clé let par rapport au var mot clé?

Je comprends la différence —var est pour la portée de la fonction tandis que let est pour la portée du bloc — mais je cherche quelque chose comme "toujours utiliser le mot clé let" ou "utiliser le mot clé var en haut des fonctions, mais le mot clé let dans des blocs comme pour les boucles ".

38
callumacrae

Je dirais que vous devriez, en principe, utiliser let chaque fois que cela ne vous dérange pas. Tel que:

for (let i = 0; i < 100; i++) {
    // Do something
}

if (condition) {
    let msg = a + b + c;
    console.log(msg);
    alert(msg);
}

Les avantages de cette approche sont:

  1. Moins de risque de remplacer une utilisation de variable globale pour autre chose
  2. Moins de risques de fuites de mémoire en raison du fait que les variables restent en mémoire longtemps après qu'elles ne sont plus pertinentes
27
neelsg

tilisez let en règle générale, et var à l'occasion.

La portée des blocs est le choix standard et le plus lisible, et facilitera le débogage. La portée des blocs permet de voir facilement où se trouve une variable dans la portée. La portée de la fonction rend les choses beaucoup moins apparentes et beaucoup plus faciles à introduire accidentellement des bogues avec des erreurs de portée.

En général, plus la portée que vous pouvez utiliser est petite, mieux c'est. Ainsi let sur var.

En particulier, cela aide à résoudre le problème sans fin de la fermeture des variables et de ne pas réaliser que leur valeur changera avant l'exécution de la fermeture:

for (var i = 1; i <= 5; i++) {
  var item = document.createElement("LI");
  item.appendChild(document.createTextNode("Item " + i));

  let j = i;
  item.onclick = function (ev) {
    alert("Item " + j + " is clicked.");
  };
  list.appendChild(item);
}
13
Phil H