Duplicaté possible: strong>
Portée variable JavaScript P> blockQuote>Ma compréhension que, avec dans une fonction si j'utilise var, j'ai une variable locale. Si je ne suis pas Delcare Var, j'ai maintenant une variable globale. P>
Mais qu'en est-il de l'ouside des fonctions, quel effet var varie-t-il? p>
6 Réponses :
Je crois qu'utiliser Var à l'extérieur d'une fonction fonctionne comme n'utilise pas Var: vous obtenez un global. L'exception à cela serait si vous êtes dans une classe ou une autre structure d'espace de noms, dans laquelle il définira toujours une variable dans cette locale p>
Je pense que vous voulez créer un var chaque fois que vous initialisez une variable. Comme je l'ai codé, lorsque je devais initialiser une variable, je le démarre avec Var. Si vous déclarez une variable sans mot var, c'est toujours global. Si vous déclarez une variable avec Var, à l'intérieur d'une fonction, elle est locale à cette fonction. Si vous créez une variable avec des fonctions extérieures Var, il s'agira d'une variable globale. P>
Tout d'abord, c'est généralement une mauvaise pratique d'utiliser le code en dehors des fonctions. Si rien d'autre, enveloppez votre code dans des fonctions anonymes: comme pour quel effet var a, il "déclare" une variable: p> VS: p> La raison en est que le code ci-dessus est fonctionnellement identique à: p> sans déclarer le variable avec Notez que l'une des bizarreries de Vous aurez également accès à votre variable dans L'objet code> window code> (bien que vous l'aurez également en définissant la variable sans var, par exemple juste var code>, vous obtenez une erreur de recherche, identique à celle d'accéder à la propriété de tout objet qui n'existe pas. p>
var code> est que toutes les déclarations sont tirées en haut du script, de sorte que cela fonctionnera également: p>
foo = 42 code>): p>
Ceci "la raison en est que le code ci-dessus est fonctionnellement identique à: alerte (fenêtre.foo); code>" est mal faux. Essayez ceci: jsfiddle.net/zekhl
@ C-Smile: Ce n'est pas faux. Jsfiddle wraps code dans une fonction anonyme par défaut. jsfiddle.net/cwolves/zekhl/1
@Chris - Dans de nombreux cas, cela n'a pas d'importance en dehors des fonctions. Le cas le plus simple où il fait est simplement avoir le code si (quelque_var) { code> où vous obtiendrez une erreur "quelque_var n'est pas défini" si la variable n'a jamais été définie ou déclarée avec
var Code>
Vraiment? Vous ne l'utiliserez pas pour économiser 4 octets? : P
Vous réalisez que c'est environ 0,00003 secondes de temps de téléchargement sur une connexion de 1 Mo.
@CHRISAKER TOUJOURS I> Utilisez var code>. Pas exception. Si vous souhaitez un ensemble global
window.foo = ... code>. C'est un gros avantage i> pour la maintenabilité et la lisibilité. Faites-le juste, vous vous remercierez.
@Chrisakaker vous ressemblez à l'un de ces micro optimisant les diables. C'est le protocole HTTP, cmon c'est lent comme enfer quand même. Maintenant, si vous étiez à la main, optimisez les paquets UDP, puis jeu. Oh et j'ai oublié de mentionner Arrête d'écrire JavaScript Assurez-vous d'utiliser un client natif dans la mesure du possible. (C'est plus rapide!)
Si vous déclarez une variable globale et définissez une valeur, elle n'aura aucune valeur pratique, mais comme mentionné, c'est la meilleure pratique. Si toutefois, vous souhaitez déclarer une variable sans valeur, vous aurez besoin de "Var". P>
Votre question est répondue à https: // développeur .mozilla.org / fr-US / Docs / Web / JavaScript / Référence / Déclarations / Var P>
à l'aide de Var à l'extérieur d'une fonction est optionnel; attribuer une valeur à un variable non déclarée implicitement Le déclare comme une variable globale. Cependant, il est recommandé de toujours utiliser var, et il est nécessaire dans Fonctions dans les situations suivantes: P>
- Si une variable dans une portée contenant la fonction (y compris la portée globale) a le même nom. LI>
- Si des fonctions récursives ou multiples utilisent des variables avec le même nom et> l'intention de ces variables sont locales. Li> ul>
Défaut de déclarer la variable dans Ces cas vont probablement conduire à Résultats inattendus. P> blockQuote>
C'est une bonne pratique pour Toujours STRY> Utilisez Dites que vous avez: p> mais plus tard Vous décidez que vous souhaitez déplacer ce code dans une fonction: p> si vous oubliez d'ajouter une instruction code> var code> Vous venez de créer une implicite globale . Maintenant, si vous créez un nouvel objet dans la portée globale nommée var code>. Strictement parlant lorsque vous êtes déjà dans la portée mondiale, vous n'avez pas besoin de la maintenabilité du code, vous devriez.
foo code>, ils causeront des conflits les uns avec les autres. P>
function doSomething() {
foo = 'bar'; // Implicit global
}
foo = 'baz';
doSomething();
console.log(foo); // Returns 'bar', not 'baz'
+1 pour discuter de l'angle de maintenance du code. Même si le code sans var code> est 100% sans bogue aujourd'hui, il sera plus facile de comprendre lorsque vous y revenez le mois prochain si vous savez que vous suivez toujours la routine de toujours en utilisant
var code > - sinon quand vous voyez
foo = 'bar' code> Vous devez rechercher ailleurs pour savoir si
foo code> a déjà été déclaré ou défini sur une autre valeur, etc.
Probablement jamais.