molily: JavaScript: Objekte und Kontext: Unlogischer Fehler

Beitrag lesen

Hallo,

Ebenso wäre aber auch denkbar, (...)

var name;
    name = value;

als

context.createAndSetVar('name', undefined);
    context.setVar('name', value);

zu interpretieren

Und das ist auch der Fall in Funktionen.
http://bclary.com/log/2004/11/07/#a-10.1.3

window.bla = "wert";  
function f () {  
   alert(bla);  
   var bla;  
}  
f();

Beim Ausführen der Funktion passiert, bevor überhaupt der Code im Funktionskörper ausgeführt wird, folgendes:
1. Die übergebenen Parameter werden ins internen Variablenobjekt kopiert.
2. Alle Funktionsdeklarationen innerhalb des Funktionskörpers erzeugen Eigenschaften beim Variablenobjekt.
3. Alle Variable Statements (das sind die var bla = ...; und var bla;) erzeugen Eigenschaften beim Variablenobjekt mit dem Wert undefined.

Dann wird erst der Code im Funktionskörper ausgeführt. Wenn also die Funktion startet, ist die Variable bla im Beispiel schon existent und hat den Wert undefined. Notiere ich bla, wird zuerst beim Variablenobjekt der Funktion gesucht, dort wird eine entsprechende Variable gefunden, also wird gar nicht weiter in der Scope-Chain gesucht.

Ich kann also nicht schreiben var bla = bla + " blub"; bzw. würde halt "undefined blub" rauskommen. Will ich auf die globale Variable zugreifen, muss ich explizit window.bla notieren.

Mathias