为什么JavaScript通过引用传递?

use*_*844 1 javascript

var a = [3, 4, 5];
var b = [6, 7, 8];

function why() {
    b = a;
    b[0] = 1;
    alert(a[0] + '    ' + b[0]);
}
why();
Run Code Online (Sandbox Code Playgroud)

结果是a[0]=1, b[0]=1;.好像JavaScript正在通过引用传递?

但在这种情况下:

var a = [3, 4, 5];
var b = [6, 7, 8];

function why() {
    b = a;
    b = [1, 2, 3];
    alert(a + '    ' + b);
}
why();
Run Code Online (Sandbox Code Playgroud)

结果是a=[3,4,5]b = [1,2,3].它为什么通过价值?如何避免通过引用传递?

Den*_*ret 6

像大多数对象语言一样,非原始变量的值是对象的引用.

在第二种情况下,您不是要更改数组,而是更改存储的引用b.

如果要复制阵列,请使用

var c = a.slice();
Run Code Online (Sandbox Code Playgroud)

然后c,a将独立发展.