Javascript variable globale avec 'var' et sans 'var'

Duplication possible:
Différence entre l'utilisation de var et l'absence de var en JavaScript

Je comprends que je devrais toujours utiliser 'var' pour définir une variable locale dans une fonction.

Quand je définis une fonction globale, quelle est la différence entre l'utilisation de 'var'?

Quelques exemples de code que je vois sur Internet

var globalVar = something; globalVar = something; 

Quelle est la différence?

Eh bien, la différence est que techniquement , une tâche simple comme globalVar = 'something'; Ne déclare pas une variable , cette affectation créera simplement une propriété sur l'objet global, et le fait que l'objet global est le dernier objet de la chaîne de portée, le rend résolu.

Une autre différence est la façon dont la liaison est établie, les variables sont liées comme propriétés «non éligibles» de son enregistrement environnemental, par exemple:

 var global1 = 'foo'; delete this.global1; // false global2 = 'bar'; delete this.global2; // true 

Je vous encourage fortement à utiliser toujours l'instruction var , votre code, par exemple, se déroulera sous le mode Strict de ECMAScript 5, les affectations aux identifiants non déclarés ne sont pas autorisées à éviter les globals implicites .

Court: Il n'y a pas de différence dans le contexte global **.

Long: l' objet Variable pour le contexte global est le contexte global lui-même. C'est pourquoi nous pouvons accéder aux variables et aux methods globales dans un contexte fonctionnel ou eval . Toutefois, l'instruction var vous permet de définir une variable dans le contexte actuel, ce qui ne fait aucune différence en omettant cela dans le contexte global. Exception : le mode strictement ES5 provoquera vraisemblablement une erreur lorsqu'il verra une déclaration sans var .


** la seule différence est que var déclare une variable sans définition dans le contexte actuel (exécution). Cela se produit au js parse time, donc le moteur sait qu'il existe une variable avec ce nom disponible dans le contexte. Omettre var se terminera dans un accès direct à la propriété à partir de l' global object .

En dehors de toute fonction dans un navigateur, il n'y a aucune différence entre l'utilisation de var ou non par rapport à la portée. Dans vos deux exemples, globalVar est un membre de la window .

Généralement, il est bon de ne pas avoir ces types de variables, de sorte que l'espace de noms global ne soit pas encombré.