我正在寻找一些关于JavaScript何时通过值传递某些内容、何时通过引用传递、何时修改传递的项影响函数外的值以及何时不影响函数外的值的综合阅读material .我还感兴趣的是,什么时候给另一个变量赋值是通过引用还是通过值,以及这是否遵循了与作为函数参数传递不同的规则.
我做了很多搜索,找到了很多具体的例子(这里有很多这样的例子),我可以从这些例子开始拼凑真正的规则,但我还没有找到一个单独的、写得很好的文档来描述所有这些规则.
另外,语言中有没有方法来控制是通过引用传递还是通过值传递?
以下是一些我想理解的问题.这些只是例子——我实际上是想了解语言所遵循的规则,而不仅仅是具体例子的答案.但是,这里有一些例子:
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?
}
如果我想制作一个完全独立的对象副本(没有任何引用),那么最好的做法是什么?