Dans mon efforce d'écrire propre code Javascript en tant que débutant, j'ai récemment été la lecture de cet article sur namespacing en JavaScript quand je suis tombé sur ce paragraphe:
Le code tout en haut de l'échantillon suivant montre les différentes façons dont vous pouvez vérifier pour voir si une variable (objet de l'espace de noms) existe déjà avant de le définir. Vous verrez régulièrement des développeurs à l'aide de l'Option 1, mais des Options 3 et 5 peuvent être considérées comme plus approfondie et l'Option 4 est considéré comme une bonne pratique.
// This doesn't check for existence of 'myApplication' in // the global namespace. Bad practice as you can easily // clobber an existing variable/namespace with the same name var myApplication = {}; /* The following options *do* check for variable/namespace existence. If already defined, we use that instance, otherwise we assign a new object literal to myApplication. Option 1: var myApplication = myApplication || {}; Option 2 if(!MyApplication) MyApplication = {}; Option 3: var myApplication = myApplication = myApplication || {} Option 4: myApplication || (myApplication = {}); Option 5: var myApplication = myApplication === undefined ? {} : myApplication; */
L'Option 1 est certainement celui que j'ai vu utilisé la plupart du temps, et je le comprends bien.
L'Option 2 est bien, mais semble manquer d'un var myApplication
à l'avance ou un if(!window.myApplication)
si myApplication
n'est pas dans la portée globale de l'état if(!myApplication)
serait jeter une erreur, ne serait-il pas?
L'Option 3 est celui que j'ai de la difficulté avec ma compréhension est que l' myApplication = myApplication
est exécuté en premier, avec myApplication
dans la portée globale (en raison de l' var
au début). Mon problème est que je ne peux pas penser à un cas où cette option n'est rien de plus que l'option 1.
L'Option 4 , à mes yeux, aurait été mieux écrit window.myApplication || (myApplication = {})
afin d'éviter de jeter une erreur s' myApplication
n'est pas dans la portée globale.
L'Option 5 est l'exclusion de la fausse-y les valeurs autres que d' undefined
mais est-ce une bonne idée? Si myApplication
est-à-dire une chaîne vide, le reste du code est susceptible d'échouer, n'est-ce pas?
Quelqu'un pour être en mesure de faire la lumière sur les différences entre les différentes options et, en particulier, expliquer pourquoi l'option 3 est décrit comme plus approfondie?