我简化了我一直在研究的功能,但是运行该功能时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.y
和z
的值传递给函数,但不传递对属性/变量的引用。您不能在函数内更改属性/变量;没有链接回它。
正常情况是返回新值:
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
选项。