为什么此js代码中的值未更改?

时间:2018-07-01 07:38:48

标签: javascript

我正在查看以下javascript代码:

var a = {i: 0};
var b = 0;

function change(a, b) {
  a.i++;
  b++;
}
change(a, b);

console.log(a, b);

您应该希望登录:{i:1} 1。它实际上返回: {i:1} 0? 为什么b = 0而不是b = 1?

2 个答案:

答案 0 :(得分:4)

因为bchange内的参数-在change内,b指的是 local 变量,并且当重新分配局部变量时,这对外部b无效。

总是将b称为全局变量:

var a = {i: 0};
var b = 0;

function change(a) {
  a.i++;
  b++;
}
change(a);

console.log(a, b);

或从b返回change,然后将外部b分配给change的结果:

var a = {i: 0};
var b = 0;

function change(a, b) {
  a.i++;
  b++;
  return b;
}
b = change(a, b);

console.log(a, b);

((如果您需要返回并重新分配多个变量,请返回一个对象或数组:

var a = {i: 0};
var b = 0;
var c = 0;

function change(a, b, c) {
  a.i++;
  b++;
  c++;
  return { b, c };
}
({b, c} = change(a, b, c));

console.log(a, b, c);

答案 1 :(得分:1)

您正在函数标头中隐藏变量a

function change() {
    a.i++;
    b++;
  }

将起作用。