2010-03-30 18 views

Antwort

10

window.a ist eine Eigenschaft von window und es ist undefined. a ist eine Variable, und es ist undeclared.

Um eine Variable zu verwenden, sollten Sie sie zuerst mit der Anweisung var deklarieren. Da Sie a nicht deklariert haben, löst der Interpreter einen Fehler aus. Objekteigenschaften müssen nicht explizit deklariert werden, um sie zu verwenden. Crockford schreibt in die guten Teile:

If you attempt to extract a value from an object, and if the object does not have a member with that name, it returns the undefined value instead.

+1

Allerdings: "window.a = 2; a" - Nein 'var' wird benötigt. Es kommt einfach vor, dass die Ausnahme ausgelöst wird, wenn ein "nicht vorangestelltes" Bezeichner-Suchmuster aus verketteten Bereichen ausläuft, um hineinzuschauen. Der letzte überprüfte Kontext ist der globale Kontext (oder "Fenster"). Für die meisten praktischen Zwecke ist "var x" im globalen Kontext dasselbe wie "window.x = undefined". Siehe http://jibbering.com/faq/faq_notes/closures.html und sehen Sie unter "Identifier Resolution, Execution Contexts und Scope Chains" nach. –

+0

@pst: das ist ein Sonderfall in Browsern, dass alle globalen Variablen Eigenschaft von 'window' sind. Es ist ein unabhängiges Problem von JavaScript. Wenn Sie 'window.a = 2 ausführen; a 'In Rhino, das eine Nicht-Browser-Umgebung ist, erhalten Sie immer noch den Referenzfehler. –

+0

@pst: Wie auch immer, danke für Ihre Ergänzung bei der Klärung der Antwort. –

Verwandte Themen