Hallo Matthias,
Danke für die Antwort(en) und Links.
Nein, das hat nichts damit zu tun, dass das Objekt global it. Das ist ein ganz anderer Fall. Wie Cheatah sagst änderst du hier die Eigenschaft eines Objekts, auf dass du durch eine Closure Zugriff hast.
Weil hier das Objekt wie eine Array funktioniert, ich also Elemente anhängen kann bzw. Arrayelemente eben überschreiben kann? Denn Fakt ist ja: Properties/Eigentschaften kann ich überschreiben oder neu hinzufügen. Das Objekt selbst aber kann ich nicht nullen. In dem Fall ist die Aussage von Crockford also eigentlich wirklich nicht wahr:
"JavaScript is a Pass By Reference language. That means that when you pass a value to a function, you're not passing a copy of it and you're not passing the name of it, you're passing a reference to it. In oldspeak that would be a pointer."
Denn gerade eben der Pointer würde mir ja _alles_ das erlauben, denn ich erhalte damit ja den direkten Zugriff, weil ich die Speicheradresse kenne. Schade dass sich bei dem Vortrag kein Kommentar abgeben lässt. Nr. 6 ist im yuiblog veröffentlicht, da geht das.
Kannst Du mir vielleicht noch bei der Funktion once() weiterhelfen?
function once(func) {
return function () {
var f = func;
func = null;
return f.apply(this, arguments);
};
}
Die soll laut Crockford ja bewirken
"One problem with that is that do_it could hold onto that function that I passed and use it again, perhaps some time when it's not to my advantage. Maybe I don't want to allow him to do that, that he can only store once into that variable. So I'll create a once function, and the once function will take a function and return a function which wraps it and which guarantees that it can only be called once."
In meinem Testbeispiel funktioniert das aber nicht.
Der Hintergedanke ist doch wohl der eines Closures, oder? Wenn once zum zweiten Mal aufgerufen wird, ist intern func (immer noch) null, im Scope der Funktion, und der übergebene Paramter func sollte das dann wohl nicht überschreiben, insofern wäre var f dann auch null und könnte nicht "applied" werden. Oder, was meinst Du?
Dank und Gruß
jobo