Fuori solo curiosità intellettuale, perché javascript accettaJavascript: z = z || [] genera un errore quando non si utilizza VAR - perché?
var z = z || [];
per inizializzare z (come z può definito inizialmente)
ma senza var, si genera un errore (nello spazio globale)
z = z || [];
(se z è precedentemente indefinito)
Nello spazio globale non è necessario utilizzare VAR anche se ottengo potrebbe b e cattiva pratica
Prima di dire che questo è un duplicato di domande come
What is the purpose of the var keyword and when to use it (or omit it)?
nota la dichiarazione che "Se siete in ambito globale, allora non c'è alcuna differenza."
Ovviamente questo non è vero al 100%, dato il mio esempio di lavoro.
Si tratta di una stranezza o di una logica legittima?
l'aggiunta di una sintesi della risposta come ho imparato:
Grazie a Tim (vedi sotto) la chiave della mia incomprensione non era rendendo conto questo (fondamentale di JavaScript)
var z; non fa assolutamente nulla se esiste già z
Ecco come questa espressione sembra avere entrambi i modi, se si assume erroneamente che "var z" inizializza sempre.
Partendo da sinistra, "var z" si limita semplicemente a garantire che z sia definito, ma in realtà non influenza alcun valore esistente se già esiste. Quindi a destra, se esiste già z, viene utilizzato, in caso contrario, la variabile è stata appena dichiarata (ma vuota) in modo che non venga utilizzata ma non genererà un errore.
Questo è un eccellente articolo su questo tipo di scoping e sollevamento problema in Javascript: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting
Molte grazie per MiniTech e tutti coloro che hanno contribuito anche!
Come regola generale: copiare il messaggio di errore effettivo è normalmente più utile della semplice scrittura "genera un errore". –