このコード:
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
です。では、オブジェクト参照を完全に変更することはできませんが、属性を変更できる特定の理由はありますか?
メルク。