11
votes

Quand dois-je utiliser var?

Duplicaté possible:

Portée variable JavaScript

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.

Mais qu'en est-il de l'ouside des fonctions, quel effet var varie-t-il?


1 commentaires

Probablement jamais.


6 Réponses :


0
votes

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


0 commentaires

0
votes

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.


0 commentaires

10
votes

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: xxx

comme pour quel effet var a, il "déclare" une variable: xxx

VS: xxx

La raison en est que le code ci-dessus est fonctionnellement identique à: xxx

sans déclarer le variable avec var , vous obtenez une erreur de recherche, identique à celle d'accéder à la propriété de tout objet qui n'existe pas.

Notez que l'une des bizarreries de var est que toutes les déclarations sont tirées en haut du script, de sorte que cela fonctionnera également: xxx

Vous aurez également accès à votre variable dans L'objet window (bien que vous l'aurez également en définissant la variable sans var, par exemple juste foo = 42 ): xxx


7 commentaires

Ceci "la raison en est que le code ci-dessus est fonctionnellement identique à: alerte (fenêtre.foo); " 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) { 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


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 Utilisez var . Pas exception. Si vous souhaitez un ensemble global window.foo = ... . C'est un gros avantage 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!)



0
votes

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".


0 commentaires

1
votes

Votre question est répondue à https: // développeur .mozilla.org / fr-US / Docs / Web / JavaScript / Référence / Déclarations / Var

à 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:

  • Si une variable dans une portée contenant la fonction (y compris la portée globale) a le même nom.
  • Si des fonctions récursives ou multiples utilisent des variables avec le même nom et> l'intention de ces variables sont locales.

    Défaut de déclarer la variable dans Ces cas vont probablement conduire à Résultats inattendus.


0 commentaires

6
votes

C'est une bonne pratique pour Toujours STRY> Utilisez 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.

Dites que vous avez: p> xxx pré>

mais plus tard Vous décidez que vous souhaitez déplacer ce code dans une fonction: p> xxx pré>

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 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 commentaires

+1 pour discuter de l'angle de maintenance du code. Même si le code sans var 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 - sinon quand vous voyez foo = 'bar' Vous devez rechercher ailleurs pour savoir si foo a déjà été déclaré ou défini sur une autre valeur, etc.