var b = 10;
var c = b;
b++;
console.log(b,c);
>> 11 10
c
貌似b
副本。
但在另一种情况:
var x = {};
var y = x;
x.abc = 10;
console.log(x.abc, y.abc);
>> 10 10
为什么y
不是x
副本,但指向同一个实例x
指向一个参考?
此外,我猜想b++
创建另一个实例,所以b
指向新的实例,但c
指向旧的实例。然而...
var u = 10;
setTimeout(function() {
console.log(u);
}, 10000)
u++;
>> 11
如果u++
匿名函数内部创建一个新的实例,那么u
应指向旧u
,不应该吗?
你最后一句话实际上解决了我的困惑 – 2012-01-09 17:33:41
@Quentin:原来的“对象”只是驻留在由js-implementation(ES3/5)创建的'激活对象'或'词法环境'中的某个地方,并且永远不会真正被E CMAscript本身。 – jAndy 2012-01-09 17:36:37
“两者都是对同一个不变值的引用。”这与观察到的产量“11 10”不矛盾吗?输出会表明它们是对不同值的引用 – Neptilo 2018-02-11 22:21:17