Nerog: Zeiger-Verhalten bei Arrays

Beitrag lesen

Achso, klar. Dann war mir nicht bekannt, was »by reference« wirklich bedeutet, weil in den mir geläufigen Sprachen nicht vorhanden.

Okay, dann wäre das ja geklärt :-)

JavaScript macht insofern etwas drittes (Java wohl auch, weshalb es als Sonderfall bezeichnet wird), wie Dmitry Soshnikov schreibt:

»Call by sharing

[…] Er schlägt dann vor, es entweder als dritte Strategie »Call by Sharing« zu nennen oder als Unterfall »call by value where value is the reference copy«.

Ja, der Artikel stellt die Unterschiede gut dar. Ich halte es jedoch weiterhin mit der Formulierung, JavaScript benutze „call by value where value is the reference copy“ ;-)

Objekte werden per Referenz übergeben, skalare Datentypen by value.

... müsste dann eher heißen, Objects haben einen veränderbaren Status und man übergibt eine Referenz auf ein und dasselbe Objekt, Primitives werden kopiert (und haben keinen veränderbaren Status, es kommen bei Methodenaufrufen usw. wieder neue Primitives heraus).

Das kann man so formulieren (mit „übergibt eine Referenz“ im Sinne von „kopiert eine Referenz“).

Persönlich finde ich es intuitiver, keine Unterscheidung zwischen der Parameterübergabe eines Primitives und eines Objects zu machen; beide werden by value übergeben. Man muss nur im Hinterkopf behalten, dass Variablen in JavaScript _nie_ Objekte beinhalten, sondern _immer_ Objektreferenzen (wieder im Unterschied zu z.B. C++).
var a = new Date; erzeugt (irgendwo im Speicher für den JavaScript-Programmierer nicht direkt zugänglich) ein Date-Objekt und speichert eine Referenz auf dieses Objekt (nicht das Objekt selbst) in a.

Gruß,
Nerog