var a = [1, 2, 3];
function isChanged(a) {
a = [];
}
isChanged(a);
console.log(a);
var a = [1, 2, 3];
function isChanged(stack) {
while (stack.length != 0) {
stack.pop();
}
}
isChanged(a);
console.log(a);
为什么第一个函数中的数组不为空,但是当我使用第二个函数时它是空的?
编辑:
我通过赋值更改变量,并覆盖其属性。
var a = {
prop: "Stackoverflow"
}
function change(a) {
a.prop = "stack"
}
change(a)
console.log(a)
var a = {
prop: "Stackoverflow"
}
function change(a) {
a = {
"prop": "stack"
}
}
change(a);
console.log(a);
答案 0 :(得分:1)
在第一个示例中,当您设置a = [];
时,您只更改了局部变量a
,它(在赋值之后)不再与碰巧具有相同性的全局变量有任何关系名称。在第二个示例中,您将直接修改stack
变量,该变量恰好是与全局变量a
相同的对象。如果你要做stack = whatever
,它的行为与第一个例子类似。
答案 1 :(得分:0)
我的猜测是因为在第一个a是一个对象引用,它被设置为一个新的空数组。第二个调用该对象引用上的函数的位置,实际上将从传递给函数的数组中删除元素。