Я ищу хороший хороший материал для чтения, когда Javascript передает что-то по значению и когда по ссылке и когда изменение переданного элемента влияет на значение вне функции, а когда нет. Меня также интересует, когда присвоение другой переменной осуществляется по ссылке или по значению, и следует ли это за любыми разными правилами, кроме передачи в качестве параметра функции.
Я много раз искал и нашел множество конкретных примеров (многие из них здесь, на SO), из которых я могу начать собирать кусочки реальных правил, но я еще не нашел ни одного, ну написанный документ, который описывает все это.
Кроме того, существуют ли способы в языке контролировать, передается ли что-либо по ссылке или по значению?
Вот некоторые из типов вопросов, которые я хочу понять. Это всего лишь примеры - я на самом деле хочу понять правила, на которых идет речь, а не только ответы на конкретные примеры. Но вот несколько примеров:
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);
Когда содержимое x, y и z изменено вне области f для всех разных типов?
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?
}
Если я хочу сделать полностью независимую копию объекта (без каких-либо ссылок), какой способ лучше всего это сделать?