【发布时间】:2015-04-15 15:18:39
【问题描述】:
当我尝试创建一个函数来交换 2 个数组时,原始数组保持不变。
function swap(x, y) {
var temp = x; x = y; y = temp;
}
u=[1, 0];
v=[0, 1];
swap(u, v);
console.log(u);
console.log(v);
这导致 u 为 [1, 0] 和 v 为 [0, 1]。函数调用 swap 后值没有改变。
另一方面,如果我在没有函数调用的情况下这样做:
u=[1, 0];
v=[0, 1];
var temp = u;
u = v;
v = temp;
console.log(u);
console.log(v);
然后它们被正确交换,u 为 [0, 1],v 为 [1, 0]。
我认为 Javascript 数组是按引用传递的,而不是按值传递的。我是不是误会了什么?
【问题讨论】:
-
预期输出是什么?
-
u 和 v 应该交换。所以 u 应该是 [0, 1] 而 v 应该是 [1, 0]。我也会在问题中更清楚地说明。
-
数组没有复制这一事实并不意味着它们是“通过引用”传递的。这更类似于 pass-by-pointer。
-
“我认为 Javascript 数组是通过引用传递的,而不是通过值传递的。我在这里误解了什么吗?”是的,JavaScript 只有 pass-by-value。值的类型无关紧要。
标签: javascript arrays pass-by-reference pass-by-value