Fuera de simplemente curiosidad intelectual, ¿por qué Javascript a aceptarJavascript: z = z || [] arroja un error cuando no se usa VAR, ¿por qué?
var z = z || [];
para inicializar z (como z puede definida inicialmente)
pero sin var, se emite un error (en el espacio global)
z = z || [];
(si z está previamente definido)
en el espacio global que no están obligados a utilizar VAR aunque lo entiendo podría b e mala práctica.
Antes de decir esto es un duplicado de preguntas como
What is the purpose of the var keyword and when to use it (or omit it)?
nota de la declaración que "Si estás en el ámbito global, entonces no hay diferencia."
Obviamente no es 100% cierto, dado mi ejemplo de trabajo.
¿Es esto un capricho o existe una lógica legítima?
añadiendo un resumen de la respuesta como lo he aprendido:
Gracias a Tim (véase más adelante) la clave de mi malentendido no se dan cuenta de esto (fundamental de Javascript)
var z; no hace absolutamente nada si z ya existe
Así es como esta expresión parece tener ambas formas, si asume incorrectamente que "var z" siempre se inicializa.
Comenzando por la izquierda, "var z" simplemente se asegura de que z esté definido pero en realidad no afecta a ningún valor existente si ya existe. Luego, a la derecha, si z ya existe, se usa, si no, la variable acaba de declararse (pero vacía) por lo que no se utilizará, pero no arrojará un error.
Este es un excelente artículo sobre este tipo de determinación del alcance y de elevación tema en Javascript: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting
Muchas gracias a MiniTech y todos los demás que contribuyeron también!
Como regla general: copiar el mensaje de error real normalmente es más útil que simplemente escribir "arroja un error". –