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