Perché con window.foo
si sta cercando esplicitamente foo
proprietà di window
oggetto che non è il caso in quest'ultima opzione. Nell'ultima opzione, se foo
non è definito, dovresti essere in grado di sapere che non è definito e ottenere l'avviso di errore libero piuttosto che l'interprete impostandolo su undefined
da solo (come nel primo caso) che guiderà a risultati imprevisti.
Reference Error:
Rappresenta un errore quando si fa riferimento una variabile inesistente. Viene generato un errore ReferenceError durante il tentativo di dereferenziare una variabile che non è stata dichiarata.
Date un'occhiata a questo articolo per ulteriori informazioni:
Citando dall'alto articolo:
Un riferimento è considerato irrisolvibile se il suo valore di base non è definito. Pertanto un riferimento di proprietà è irrisolvibile se il valore prima del punto non è definito. L'esempio seguente lancia un ReferenceError ma non lo fa perché TypeError arriva prima. Questo perché il valore di base di una proprietà è soggetto a CheckObjectCoercible (ECMA 5 9.10 tramite 11.2.1) che genera un'eccezione TypeError quando si tenta di convertire un tipo non definito in un oggetto.
Esempi:
var foo;
foo.bar; //TypeError (base value, foo, is undefined)
bar.baz; //ReferenceError (bar is unersolvable)
undefined.foo; //TypeError (base value is undefined)
riferimenti che non sono né le proprietà o le variabili sono per definizione irrisolvibile e getterà un ReferenceError, così:
foo; //ReferenceError
'window.foo' non è equivalente a' var foo'. –
@TimDown. puoi elaborarne altri per favore? forse in una risposta? – gdoron
@TimDown & @gdoron Ok, questo è un po 'falso - volevo dire che window.foo è equivalente a 'var foo' quando dichiarato nel contesto globale. – JKing