2010-03-30 17 views

Respuesta

10

window.a es propiedad de window y undefined. a es una variable, y es no declarado.

Para usar una variable, primero debe declararla usando la instrucción var. Como no declaró a, el intérprete genera un error. Las propiedades del objeto no son necesarias para declararse explícitamente para usarlas. Crockford escribe en las partes buenas:

If you attempt to extract a value from an object, and if the object does not have a member with that name, it returns the undefined value instead.

+1

Sin embargo, "window.a = 2; a" - No se necesita 'var'. Simplemente ocurre que se lanza la excepción cuando una búsqueda de identificador "sin prefijo" se queda sin alcances encadenados para mirar. El último contexto marcado es el contexto global (o 'ventana'). Para la mayoría de los propósitos prácticos, 'var x' en el contexto global es lo mismo que 'window.x = undefined'. Consulte http://jibbering.com/faq/faq_notes/closures.html y consulte "Resolución de identificador, contextos de ejecución y cadenas de alcance". –

+0

@pst: es un caso especial en los navegadores que todas las variables globales son propiedad de 'window'. Es un problema independiente de JavaScript. Si ejecuta 'window.a = 2; a' en Rhino, que no es un entorno de navegador, aún obtiene el error de referencia. –

+0

@pst: de todos modos, gracias por su suplemento para aclarar la respuesta. –

Cuestiones relacionadas