数组在功能中重置

时间:2017-06-18 03:06:55

标签: javascript arrays scope

场景1

var a = [1, 2, 3];

function isChanged(a) {
  a = [];
}
isChanged(a);
console.log(a);

场景2

var a = [1, 2, 3];

function isChanged(stack) {
  while (stack.length != 0) {
    stack.pop();
  }
}
isChanged(a);
console.log(a);

为什么第一个函数中的数组不为空,但是当我使用第二个函数时它是空的?

编辑:

我通过赋值更改变量,并覆盖其属性。

场景3 - 更改对象的属性

var a = {
  prop: "Stackoverflow"
}

function change(a) {
  a.prop = "stack"
}
change(a)
console.log(a)

场景4 - 更改整个变量本身

var a = {
  prop: "Stackoverflow"
}

function change(a) {
  a = {
    "prop": "stack"
  }
}
change(a);
console.log(a);

2 个答案:

答案 0 :(得分:1)

在第一个示例中,当您设置a = [];时,您只更改了局部变量a,它(在赋值之后)不再与碰巧具有相同性的全局变量有任何关系名称。在第二个示例中,您将直接修改stack变量,该变量恰好是与全局变量a相同的对象。如果你要做stack = whatever,它的行为与第一个例子类似。

答案 1 :(得分:0)

我的猜测是因为在第一个a是一个对象引用,它被设置为一个新的空数组。第二个调用该对象引用上的函数的位置,实际上将从传递给函数的数组中删除元素。