将值传递给函数参数

时间:2016-10-07 12:30:36

标签: javascript function arguments parameter-passing

我有某人的代码设置了新对象的名称。

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

var newPerson = new Object(); 
setName(newPerson); 
console.log(newPerson.name);

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

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

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

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

2 个答案:

答案 0 :(得分:5)

将具有对象值的变量视为处理到这些对象。

var newPerson = new Object(); 

您创建了一个名为newPerson的新对象及其句柄。

setName(newPerson);

function setName(human) { 

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

    human.name = "Nicholas";

human引用的对象有一个新名称。由于humannewPerson仍是同一对象的句柄,newPerson.name现在也已更改。

    human = new Object();

现在手柄发散了。 newPerson仍然是尼古拉斯的句柄,但human成为新对象的句柄。

    human.name = "Greg";

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

};

console.log(newPerson.name);

newPerson仍然是尼古拉斯的手柄。

答案 1 :(得分:0)

human 是函数的局部变量。

  

human = new Object();

在此行之后,您有本地变量 human 的新对象,但不是您发送到参数的变量

这意味着您通过值发送了参数。

例如在C#中,您可以使用关键字 ref ,这将使函数按预期工作。