将值传递给函数参数

Ami*_*ena 0 javascript arguments function parameter-passing

我有一个人的代码,用于设置新对象的名称.

function setName(human) { 
    human.name = "Nicholas";
    human = new Object();
    human.name = "Greg";
};

var newPerson = new Object(); 
setName(newPerson); 
console.log(newPerson.name);
Run Code Online (Sandbox Code Playgroud)

我想使用person对象的属性'name'的值.

我期待价值是'格雷格',但我得到'尼古拉斯'.

这是我的理解:'human'是指向Object的指针.调用该函数时,将通过newPerson的名称创建指向同一Object的另一个指针.

newPerson对象的'name'属性将设置为'Nicholas'.然后,在函数的第二行中创建另一个newPerson对象.因此,应该销毁第一个实例.然后,此新Object的'name'属性将设置为'Greg'.我哪里错了?

Jon*_*Jon 5

将具有对象值的变量视为这些对象的句柄.

var newPerson = new Object(); 
Run Code Online (Sandbox Code Playgroud)

您创建了一个新对象及其句柄newPerson.

setName(newPerson);

function setName(human) { 
Run Code Online (Sandbox Code Playgroud)

setName被调用时,newPerson被复制到human.所以现在你有两个引用相同对象的句柄.事实上,它们实际上都可以在函数内部访问,但这对讨论来说并不重要.

    human.name = "Nicholas";
Run Code Online (Sandbox Code Playgroud)

引用的对象human具有新名称.由于humannewPerson仍然处理同一个对象,newPerson.name现在已经改好了.

    human = new Object();
Run Code Online (Sandbox Code Playgroud)

现在手柄发散了.newPerson仍然继续成为尼古拉斯的手柄,但human成为新对象的手柄.

    human.name = "Greg";
Run Code Online (Sandbox Code Playgroud)

而这个新对象的名字是格雷格.这不会以任何方式影响尼古拉斯.

};

console.log(newPerson.name);
Run Code Online (Sandbox Code Playgroud)

newPerson 仍然是尼古拉斯的处理.