Pregunta

A menudo veo un objeto global se define en el código javascript para actuar como un espacio de nombres.

var MyNS = {a: function() {}, ... };

Pero a veces, veo a la gente deja fuera la palabra clave "var" como

MyNS = {a: function() {}, ...};

Creo en los navegadores web, si no se define una variable con var, se pone en el objeto de la ventana, que actúa como un espacio de nombres global. Ya que ahorra unos pocos bytes de texto al no utilizar "var" ¿hay una razón para usar la palabra clave para este propósito específico

¿Fue útil?

Solución

  

Desde que ahorra unos pocos bytes de texto al no utilizar "var" ¿hay una razón para usar la palabra clave para este propósito específico?

yo no os recomiendo para evitar la palabra clave var, incluso si usted está en el Código Global.

Las dos formas parecen similares, pero en realidad no son los mismos, el primero es un declaración de variables , Objeto Variable en código global, es el objeto global en sí mismo, Es por eso que las variables globales son accesibles como propiedades del objeto global (window.MyNS).

El segundo es un asignación no declarado , se crea una propiedad en el objeto global si el identificador no se encuentra en la cadena de ámbito.

Una verdadera razón de evitarlo es que en el nuevo estándar de la lengua, ECMAScript 5ª Edición, bajo Modo estricto , una asignación a un identificador no declarado arrojará un ReferenceError romper su código.

También hay otra diferencia sutil entre los dos ejemplos, la variable de instancias crea la propiedad en el objeto global que es no puedan eliminar:

var myVar = '';
delete window.myVar; // false
typeof window.myVar; // 'string'

Mientras que la asignación no declarado no:

myProp = '';
delete window.myProp; // true
typeof window.myProp; // 'undefined'

Artículo recomendado:

Otros consejos

El uso de var define una variable local en el ámbito actual. Si estás en el ámbito global, son efectivamente equivalentes. El uso de var hay más de comprensibilidad y facilidad de mantenimiento, ya que la intención es absolutamente claro. Es menos claro sin inicializar el var.

En cualquier ámbito local, si está en algún lugar MyNS inicializado en la cadena de alcance, usted será sobrescribir a la variable local en lugar de definir una variable global.

Creo que es agradable de usar la palabra clave, ya que le da el hábito, y ayuda a evitar errores desagradables cuando se le olvida dentro de los cuerpos de función. También es bueno en caso de que algunos hallazgos globales de código en sí emigraron en una función.

Pero no, no es estrictamente necesario.

editar -. @Eyelidlessness tiene un muy buen punto, aunque si estás escribiendo código a nivel global ya no es un problema

A prueba de balas bastante patrón que he visto es inicializar los espacios de nombres globales con algo como esto:

(function(window, undefined) {

  var foo = { stuff: "in my namespace", ... };

  window.foo = foo;
})(this);

A nivel mundial, this será el objeto de la ventana (si se encuentra en un navegador, y si no es así, entonces es lo que el objeto global es en ese contexto).

Douglas Crockford en esta pregunta exacta: http://www.yuiblog.com/blog / 2008/04/16 /-dominación global partes de dos /

Se instala sobre el uso de un comentario con la inicialización, pero sin var. Su análisis de las ventajas y desventajas es la lectura vale la pena incluso si está en desacuerdo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top