Javascript引用复制的赋值与传递
1 function foo(x) { 2 x.push(4) 3 console.log(x); // [1, 2, 3, 4] 4 x = [4, 5, 6] 5 x.push(7) 6 console.log(x) // [4, 5, 6, 7] 7 } 8 var a = [1, 2, 3] 9 foo(a) 10 console.log(a) // [1, 2, 3, 4]
我们向函数传递 a 的时候,实际是将引用 a 的一个复本赋值给 x,而 a 仍然指向 [1,2,3]。
在函数中我们可以通过引用 x 来更改数组的值(push(4) 之后变为 [1,2,3,4])。但 x =
[4,5,6] 并不影响 a 的指向,所以 a 仍然指向 [1,2,3,4]。
我们不能通过引用 x 来更改引用 a 的指向,只能更改 a 和 x 共同指向的值。