mrjerk: scope chain

Beitrag lesen

Hallo,

aber wieso die letzte zeile?

Schauen wir uns nochmal die Funktion an:

  
function scope_test()  
{  
  var x = 7;  
  document.write("In scope_test: x = " + x + ", y = " + y + "<br>");  
  y=12  
}  

mit "var x" wird eine lokale Variable in der Funktion angelegt. Das bedeutet, die Variable x des äußeren Scope ist in diesem Moment nicht mehr gültig, sondern es gibt ein neues x (mit dem Wert 7).
Da die Variable lokal ist, wird sie aber beim Verlassen der Funktion wieder weggeräumt, das x ausserhalb der Funktion bekommt von der ganzen Sache nichts mit - und hat daher noch seinen alten Wert (5).

y=12 hingegen ist nicht lokal definiert. Folglich ist diese Variable global, der Scope ist also der von AUSSERHALB der Funktion. Deswegen wird mit "y=12" auch das y ausserhalb der Funktion verändert.

Anders erklärt, falls Du mit dem Begriff "Stack" was anfangen kannst:
"var x=7" legt eine neue Variable auf den Stack. In dem document.write wird nun das x vom Stack genommen, welches am weitesten oben liegt (LIFO), also das x mit Wert 7.

Für y wird hingegen KEIN neues Element auf den Stack gelegt, bei "y=12" wird das y vom Stack geholt, was am höchsten oben liegt, und das ist das äußere y (mit Wert 10)  - dieses wird dann mit mit einem neuen Wert befüllt (12).

Hoffe, das hilft Dir weiter.

Viele Grüße,
Jörg