这段代码:
function CHANGE(d, cb){
d.three = 3;
d = {};
console.log("d was changed into:");
console.log(d);
cb();
}
var d = { one: 1, two: 2 };
CHANGE(d, function(){
console.log("d after the callback is: ");
console.log(d);
});
既然d
被改写了CHANGE()
,确实应该显示{}
为d
。然而,结果很奇怪:
d was changed into:
{}
d after the callback is:
{ one: 1, two: 2, three: 3 }
因此,d
已将属性three
添加到其中。没关系。然后它被分配了一个空对象{}
。
我不知道该怎么想。
在回调()中添加一个额外的属性three
,很好。然后对象被重写。美好的。打印输出显示该对象确实被重写了。然后,在回调中,它显示具有额外three
属性的对象......?!?
如果它没有改变或重写,它将是一致的。但是……变了一半……?
事实上,没有必要使用回调来显示这一点。即使这样也有同样的问题:
function CHANGE( o ){
o.three = 3;
o = {};
}
var d = { one: 1, two: 2 };
CHANGE(d);
console.log("d after the function is: ");
console.log(d);
这里d
又是完整的对象,包括three
. 那么,我不能完全更改对象引用但可以更改属性的任何特殊原因......?
默克。