Da mit window.foo
Sie explizit nach foo
Eigenschaft von window
Objekt suchen, was nicht der Fall in der letzteren Option ist. Wenn in der letzten Option foo
nicht definiert ist, sollten Sie als Entwickler wissen, dass es nicht definiert ist, und die Fehlerwarnung erhalten, anstatt den Interpreter selbst auf undefined
zu setzen (wie im ersten Fall) zu unerwartet Ergebnisse.
Reference Error:
Repräsentiert einen Fehler, wenn ein nicht existierendes Variable verwiesen wird. Ein ReferenceError wird ausgelöst, wenn versucht wird, eine Variable zu dereferenzieren, die nicht deklariert wurde.
für weitere Informationen zu diesem Artikel Werfen Sie einen Blick:
von oben Artikel Zitiert:
A Referenz unresolvable betrachtet wird , wenn sein Wert Basis ist nicht definiert. Daher ist eine Eigenschaftsreferenz nicht lösbar, wenn der Wert vor dem Punkt nicht definiert ist. Das folgende Beispiel würde einen ReferenceError auslösen, aber nicht, weil TypeError zuerst dorthin gelangt. Dies liegt daran, dass der Basiswert einer Eigenschaft CheckObjectCoercible (ECMA 5 9.10 via 11.2.1) unterliegt, was beim Versuch, einen nicht definierten Typ in ein Objekt zu konvertieren, einen TypeError auslöst.
Beispiele:
var foo;
foo.bar; //TypeError (base value, foo, is undefined)
bar.baz; //ReferenceError (bar is unersolvable)
undefined.foo; //TypeError (base value is undefined)
Referenzen, die weder Eigenschaften oder Variablen sind per Definition nicht auflösbaren und wird eine Reference, So werfen:
foo; //ReferenceError
'window.foo' ist nicht äquivalent zu' var foo'. –
@TimDown. Kannst du bitte etwas mehr ausarbeiten? vielleicht in einer Antwort? – gdoron
@TimDown & @gdoron Okay, das ist ein bisschen falsch - was ich meinte war window.foo ist äquivalent zu 'var foo', wenn es im globalen Kontext erklärt wird. – JKing