【发布时间】:2016-02-01 22:37:48
【问题描述】:
例如,我有以下 JS 对象:
var obj = {
n: 0,
o: {}
};
var nGlobal = obj.n;
var oGlobal = obj.o;
并且想使用全局变量来使它看起来像这样:
var obj = {
n: 5,
o: {
x: 7
}
};
显然,我可以为oGlobal 的属性赋值:
oGlobal.x = 7;
但是,有什么方法可以将obj.n 的值更改为nGlobal,而不提obj?
就像这样:
console.log(obj); // {n: 1, o: {}}
nGlobal.set(5);
// or
nGlobal.value = 5;
console.log(obj); // {n: 5, o: {}}
【问题讨论】:
-
JavaScript 是按值传递,而不是按引用传递。为变量赋值永远不会改变另一个变量或属性的值(例外:全局范围和
with)。 -
@FelixKling 或者更确切地说,对于基元:按值传递和非基元:按引用传递
-
@Tushar:不,对象被表示为 引用,但这与 pass-by 引用无关。引用传递和值传递是指变量和参数如何相互关联。这与他们持有的价值观无关。
标签: javascript reference variable-assignment javascript-objects