2009-02-24 63 views
7

En Javascript no es necesario declarar una variable con la palabra clave var antes de usarla. De inmediato podemos hacer cosas como myCount = 12; o myStr = "Hello"; (donde myCount, myStr no se han declarado antes). Tal uso, declara e inicializa las variables en el alcance 'global'.¿Por qué no es obligatorio declarar una variable en Javascript antes de usarla?

cuáles podrían ser las razones para proporcionar esta función? ¿Y es un buen estándar?

ACTUALIZACIÓN: Mi pregunta no es cuáles son las diferencias entre 'usar una variable sin declarar' y 'declarar y luego usar' y cómo afecta el alcance.

Mi pregunta es '¿por qué se permite en javascript para usar una variable directamente sin declarar' como la mayoría de los lenguajes de programación tienen un control estricto sobre esto.

ACTUALIZACIÓN: Veo el siguiente texto entrecomillado como un mal efecto de esta función. Entonces, ¿por qué tener esta característica en absoluto?

"Supongamos que hay un nivel mundial declarado variables x (var x="comparison string") ya la que soy consciente de y con la intención de crear mi propio mundial 'x' en el interior de una de mis funciones inicializar una (x=-1) y no me acaban de romper . otra funcionalidad

por lo tanto, hay una buena razón en absoluto? por tener esta característica?

+0

Merece la pena poner su código JS a través de Crockford's JSLint para detectar snafu's como ese - y otros :) – Kristen

+0

(Lo siento, le agradezco que no sea la respuesta a su pregunta, fue solo una sugerencia) – Kristen

+0

Y una buena sugerencia al respecto . :) – Magnar

Respuesta

12

Javascript estaba destinado para los scripts muy simples en el navegador. Exigir declaraciones variables parecía innecesario.

Por supuesto, es un error en el lenguaje. Y los creadores de javascript lo saben. Ellos querían cambiarlo. Pero no pudieron. ¿Por qué?

Porque Microsoft ya había diseñado ingeniería inversa de JavaScript y creado su JScript duplicado, con errores y todo. Microsoft vetó cualquier cambio, incluso correcciones de errores, ya que se mostraron inflexibles sobre no romper las secuencias de comandos de Anyones. Entonces, incluso si cambiaran JavaScript, JScript en IE se mantendría igual.

No es una buena razón. Pero es el que tenemos.

Fuente: Obtuve mi clase de historial de JavaScript de Douglas Crockford: "El lenguaje de programación JavaScript", http://video.yahoo.com/watch/111593/1710507 Esta parte de la historia dura entre 9 y 11 minutos en el video.

+1

Abrazo. Ampliar. Extinguir. – annakata

+0

que es una razón triste de hecho. una característica no deseada que vemos y usamos después de todo. –

+0

creo que la tuya es la respuesta. esperando ver si alguien sabe algo más. hasta entonces, uno votará por usted. –

4

buenas razones? Sinceramente, no puedo pensar en una sola, que es una de las pocas cosas que realmente me gusta sobre JS.

Es posible porque todo sucede con en el ámbito global si no se controla de otra manera y JS permite la creación de variables implícita como esta. El costo de esto es un enorme potencial para detectar errores y contaminación, y solo se beneficia dado que "esto" existe para definir explícitamente el auto-alcance y "ventana" y "documento" existen para referencias globales, está guardando algunos caracteres, lo que no es razón en absoluto.

+0

sí, exactamente mi punto. supongamos que ya existe una variable declarada globalmente 'x' que no conozco y que con la intención de crear mi propia 'x' global dentro de mi función inicializo una y allí termino rompiendo otra funcionalidad. ¿Hay alguna buena razón en absoluto? –

+0

Como dije, me supera si hay alguno. Mejor preguntarle a Brendan. – annakata

+0

bien. kewl. Espero que Brendan pase por este hilo. –

1

Mi pregunta es 'por qué está permitido en javascript utilizar una variable directamente sin declararlo' ya que la mayoría de los lenguajes de programación tienen una estricta verificación de esto.

Esa es la diferencia entre los lenguajes estáticos y dinámicos. Javascript está tipeado dinámicamente, por lo que no es necesario declararlo primero. Como se señaló en otras respuestas, la palabra clave var es más responsable del alcance de una variable que su declaración.

Y no creo que la mayoría de los lenguajes de programación tengan un control sobre eso.

+0

Sí, pero causa problemas que ser de gran ayuda. –

+0

hay tipos estáticos con variables automáticas (¿haskell?) Y se escriben de forma dinámica sin ellos (¿Esquema?) – Javier

+0

@ ChanLFC: por ejemplo? – SilentGhost

0

Debido a que es un lenguaje de script. Hechos niños. ¡Y así fue como fue diseñado!

1

Lua tiene un problema similar: cualquier variable no declarada es global por defecto. En la lista de correo, es un tema recurrente que pregunta por qué no debería ser 'local por defecto'. por desgracia, que introduciría ambigüedades muy desagradables en el lenguaje, por lo que la conclusión general es "global por defecto es malo, local de forma predeterminada es peor"

+0

bien, ¿por qué tener algo por defecto en primer lugar? si no tiene una palabra clave var adjunta y no se ha declarado antes, genere un error. simple :-) –

Cuestiones relacionadas