我简化了我一直在研究的功能,但是运行该功能时console.log仍然等于0。我在做错什么会导致对象无法更新?

var x = { y: 0 };

var z = 5;

function addStrokesToScore(a, b) {
 a += b;
}

addStrokesToScore(x.y, z);

console.log(x.y);

最佳答案

addStrokesToScore(x.y, z)x.yz的值传递给函数,但不传递对属性/变量的引用。您不能在函数内更改属性/变量;没有链接回它。

正常情况是返回新值:

function addStrokesToScore(a, b) {
  return a + b;
}

x.y = addStrokesToScore(x.y, z);


或者,您可以传入对x对象的引用,并使用该引用来更新其y属性:

function addStrokesToScore(obj, b) {
  obj.y += b;
}

addStrokesToScore(x, z);


但总的来说,除非有充分的理由,否则您应该使用return选项。

09-06 16:41