按引用与按值划分的 JavaScript
2022-08-29 23:23:35
我正在寻找一些很好的综合阅读材料,关于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?
}
如果我想制作一个对象的完全独立的副本(没有任何引用),那么最佳实践方法是什么?