Ich bin auf der Suche nach einigen guten umfassenden Lesestoff auf, wenn JavaScript übergibt etwas durch Wert und wenn durch Verweis und wenn die Änderung einer übergebenen Element wirkt sich auf den Wert außerhalb einer Funktion und wenn nicht. Ich interessiere mich auch dafür, wann die Zuweisung an eine andere Variable per Referenz und wann per Wert erfolgt und ob dies anderen Regeln folgt als die Übergabe als Funktionsparameter.
Ich habe viel gesucht und viele konkrete Beispiele gefunden (viele davon hier auf SO), aus denen ich Teile der wirklichen Regeln zusammensetzen kann, aber ich habe noch kein einziges, gut geschriebenes Dokument gefunden, in dem alles beschrieben ist.
Gibt es außerdem Möglichkeiten, in der Sprache zu steuern, ob etwas als Referenz oder als Wert übergeben wird?
Hier sind einige der Fragen, die ich verstehen möchte. Das sind nur Beispiele - ich möchte eigentlich die Regeln verstehen, nach denen die Sprache funktioniert, nicht nur die Antworten auf bestimmte Beispiele. Aber hier sind einige Beispiele:
function f(a,b,c) {
a = 3;
b.push("foo");
c.first = false;
}
var x = 4;
var y = ["eeny", "miny", "mo"];
var z = {first: true};
f(x,y,z);
Wann werden die Inhalte von x, y und z außerhalb des Geltungsbereichs von f für alle verschiedenen Typen geändert?
function f() {
var a = ["1", "2", "3"];
var b = a[1];
a[1] = "4";
// what is the value of b now for all possible data types that the array in "a" might hold?
}
function f() {
var a = [{yellow: "blue"}, {red: "cyan"}, {green: "magenta"}];
var b = a[1];
a[1].red = "tan";
// what is the value of b now and why?
b.red = "black";
// did the value of a[1].red change when I assigned to b.red?
}
Wenn ich eine völlig unabhängige Kopie eines Objekts erstellen möchte (ohne jegliche Verweise), was ist der beste Weg, um das zu tun?