Hallo,
Der Punkt ist einfach:
Wenn man irgendwo eine Funktion definiert, sei es per Deklaration, Expression oder über den Function-Konstruktor, gibt es zwei Scopes: Der Scope der Umgebung der Funktion und der Scope der Funktion selbst. Eine so notierte Funktion hat immer Zugriff auf den umgebenden Scope. Mit dem Funktionsobjekt kann man danach anstellen, was man will, es an andere Objekte heften, es als Parameter weitergeben usw. Der Scope bleibt erhalten. Ein paar Beispiele:
<script type="text/javascript">
// globaler Scope
var g = "g ";
function a () {
// globaler Scope + Scope der Funktion a
var eA = "a ";
(function b () {
// globaler Scope + Scope der Funktionen a + b
var eB = "b ";
(function c () {
// globaler Scope + Scope der Funktionen a + b + c
var eC = "c ";
function d (kontext) {
// globaler Scope + Scope der Funktionen a + b + c + d + Scope des Objekts, dessen Methode sie ist
var eD = "d ";
alert("this: " + this + "\nkontext: " + kontext + "\n" +
g + eA + eB + eC + eD + (typeof(this.eF) == "string" ? this.eF : "")
);
}
d("c()");
e = d;
call(d);
constr.prototype.func = d;
})();
})();
}
function call (func) {
func("call()");
}
function constr () {
this.eF = "e";
this.func("constr()");
}
a();
var obj = new constr();
e("global");
obj.func("global obj.func()");
</script>
Mathias