La déclaration controversée « avec » : peut-elle être utilisée pour de bon ?
Les remarques d'Alan Storm sur la déclaration « avec » ont suscité une curiosité en nous. Bien que son utilité ait rarement été explorée, ses pièges potentiels restent flous. Nous avons approfondi son utilisation et découvert certaines applications légitimes tout en évitant ses risques.
Là où la déclaration « avec » brille
Une utilisation notable de la déclaration « avec » est pour définir des variables dans une portée de bloc. JavaScript manque de variables de portée bloc, ce qui le rend sujet à des problèmes de portée dans les boucles et les fermetures.
Les boucles For et l'instruction "with"
Considérez le code suivant :
for (var i = 0; i < 3; ++i) { setTimeout(function() { alert(num); }, 10); }
Ce code a pour but d'afficher le compteur de boucle "i" de manière asynchrone. Cependant, cela échoue car JavaScript n'introduit pas de nouvelle portée pour chaque itération et la variable "num" est partagée entre les trois fermetures.
Simulation de la portée du bloc avec "with"
Jusqu'à ce que ES6 soit largement disponible, l'instruction « with » peut être utilisée pour simuler la portée du bloc :
for (var i = 0; i < 3; ++i) { with ({num: i}) { setTimeout(function() { alert(num); }, 10); } }
Ce code crée un objet distinct avec une propriété "num" pour chaque itération, isolant efficacement la variable dans la portée du bloc.
Autres utilisations de "with"
En plus de simuler la portée du bloc, l'instruction "with" peut également être utilisée pour :
Accéder aux propriétés des objets facilement :
with (object) { property = value; }
Itérer dans les propriétés de l'objet :
with (object) { for (property in this) { // Do something with the property } }
Pièges à éviter
Bien que la déclaration « avec » puisse être utile, elle vient avec des pièges potentiels :
Conclusion
L'instruction « with » peut être un outil utile dans des scénarios spécifiques, tels que la simulation de la portée d'un bloc et l'accès pratique aux propriétés d'un objet. Cependant, ses inconvénients potentiels doivent être soigneusement examinés avant de l'utiliser dans votre code.
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!