ES6, ou ECMAScript 6.0, représente la norme mise à jour pour JavaScript, officialisée en juin 2015. Cette version introduit des fonctionnalités clés pour améliorer la gestion des variables et la portée du code.
Utilisation de la déclaration let
La commande let permet de déclarer des variables avec une portée limitée au bloc de code où elles sont définies. Ces variables ne bénéficient pas du hoisting et ne peuvent pas être redéclarées dans le même bloc.
<script type="text/javascript">
{
let valeur = 10;
// Tenter de redéclarer provoque une erreur
// let valeur = 20; // SyntaxError: Identifier 'valeur' has already been declared
console.log(valeur); // Affiche 10
}
// Accéder à valeur ici génère une ReferenceError
</script>
Pourquoi la porrtée de bloc est-elle essentielle ?
Premièrement, elle évite que des variables internes n'écrasent des variables externes par inadvertance.
function traiterValeur(val) {
console.log(val);
if (val == 2) {
var val = 'salut ES6';
console.log('Vérification du remplacement');
console.log(val); // Affiche 'salut ES6' car var a une portée de fonction
}
}
var val = 2;
traiterValeur(val); // Sortie: 2 puis 'salut ES6'
Deuxièmement, elle empêche les fuites de variables dans les boucles, où les variables de boucle déclarées avec var deviennent globales.
var tableau = [];
for (var compteur = 0; compteur < 10; compteur++) {
tableau[compteur] = function () {
return compteur;
}
}
// Attendu: 5, mais sort 10 car compteur est global
console.log(tableau[5]());
Une solution consiste à utiliser une closure pour capturer la valeur correcte.
var tableau = [];
for (var compteur = 0; compteur < 10; compteur++) {
tableau[compteur] = (function (index) {
return function() {
return index;
}
})(compteur)
}
console.log(tableau[5]()); // Sort maintenant 5
Utliisation de la déclaration const
const déclare des constantes, c'est-à-dire des variables en lecture seule qui doivent être initialisées immédiatement.
const PI = 3.14159;
// const SECRET; // Erreur: Missing initializer in const declaration
Similitudes avec let : portée de bloc, zone morte temporelle (temporal dead zone), et interdiction de redéclaration.
Recommandations pratiques
Privilégiez const par défaut pour les variables qui ne changeront pas. Utilisez let uniquement lorsque la réaffectation est nécessaire au sein du code.