Je suis à la recherche d'un bon matériel de lecture complet pour savoir quand JavaScript passe quelque chose par valeur et quand par référence et quand la modification d'un élément passé affecte la valeur en dehors d'une fonction et quand non. Je suis également intéressé par le fait de savoir quand l'assignation à une autre variable est par référence ou par valeur et si cela suit des règles différentes de celles du passage en tant que paramètre de fonction.
J'ai fait beaucoup de recherches et j'ai trouvé de nombreux exemples spécifiques (dont beaucoup ici sur SO) à partir desquels je peux commencer à rassembler des morceaux des vraies règles, mais je n'ai pas encore trouvé de document unique et bien écrit qui décrive tout cela.
Par ailleurs, existe-t-il des moyens dans le langage pour contrôler si un élément est transmis par référence ou par valeur ?
Voici quelques-uns des types de questions que je veux comprendre. Ce ne sont que des exemples - je cherche en fait à comprendre les règles de la langue, et pas seulement les réponses à des exemples spécifiques. Mais voici quelques exemples :
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);
Quand les contenus de x, y et z sont-ils modifiés en dehors de la portée de f pour tous les différents types ?
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?
}
Si je veux faire une copie totalement indépendante d'un objet (sans aucune référence), quelle est la meilleure façon de le faire ?