Hallo,
Ja, die Variable existiert noch, aber immer mit dem Wert, den sie _zuletzt_ innerhalb von addBehaviour gehabt hat.
Ah, stimmt. Das hätte ich nicht erwartet. Also wird bei der Closure tatsächlich eine Referenz auf die Variable im Scope der Ausführung der äußeren Funktion angelegt.
Neben der Speicherung in Eigenschaften kann man natürlich weitere Funktionen und Closures verwenden:
function addBehaviour() {
var id = "g";
var elem = document.getElementById(id);
function addClick (elem, id) { // Closure, aber elem und id werden als Parameter überschrieben
function clickHandler () {
alert(elem + " " + id);
}
elem.onclick = clickHandler;
}
addClick(elem, id);
elem = id = null;
}
window.onload = addBehaviour;
Die inneren Funktionen können natürlich auch anonym sein, hier nur aus Gründen der Übersicht nicht.
Mathias