2016-12-26 3 views
1

私はperson.name"john"に変更された理由を理解していますが、personがメモリ内のundefinedを次の行のobj = undefinedに参照しない理由を完全に理解できません。基本JS - なぜこのオブジェクトは未定義に変更されないのですか?

var person = { name: "wtf" }; 

function doStuff(obj) { 
    obj.name = "john"; 
    obj = undefined; 
    } 

doStuff(person); 

person.nameは現在代わりメモリに何を「ポインティング」、すなわち、未定義のオブジェクトへjohnと依然としてperson参照または「点」に等しいです。私は自分の学習でこれを実行することができ、この方法で動作させることができますが、なぜこのように動作するのかを正確に表現することはできません。あなたの関数で

+0

[JavaScriptで定義されていないオブジェクト参照]の複製があります。(http://stackoverflow.com/questions/22044780/object-references-to-undefined-in-javascript) – JJJ

+0

関連記事[JavaScript - 方法/方法オブジェクト参照を関数からヌルに設定するか?](http://stackoverflow.com/questions/9205070/javascript-how-can-i-set-an-object-reference-to-null-from-a-function) – JJJ

答えて

2

objパラメータは、パラメータ値がpersonに保存されたオブジェクト参照のコピーある関数呼び出し

doStuff(person); 

personへの参照が渡されます。したがって、obj変数に新しい値を渡すと、personには影響しません。

+0

明確にするために、パラメータ値(コピー)は単に他のものを単に参照すると言うことができますか?この場合、未定義です。 – colbisaurusrex

+0

@colbisaurusrexはい。そのパラメータの値を更新したので、元の値(オブジェクト参照のコピー)が上書きされます。 – Pointy

関連する問題