0

请解释为什么在本地范围内更改全局对象字符串属性会影响全局范围内的属性,但为整个对象赋予新值不会。

在我的示例中,第一次运行 changeMyName 函数时,我得到了我所期望的 - my_global_object.name 值的变化。

但是为什么我第二次运行该函数时没有将 my_global_object 对象更改为 my_global_object.children.first_child 对象?

var my_global_object=new Object();
my_global_object.name='my parent name'
my_global_object.children=new Object();
my_global_object.children.first_child=new Object();
my_global_object.children.first_child.name='my first child name';

function changeMyName(child_name,new_name){
    var my_local_object;
    my_local_object=my_global_object;
    if(child_name) my_local_object=my_local_object.children[child_name];
    my_local_object.name=new_name;  
}

changeMyName(false,'new parent name'); 

changeMyName('first_child','new first child name');

为什么这个“=”赋值

if(child_name) my_local_object=my_local_object.children[child_name];

不同于这个“=”?

my_local_object.name=new_name;  

是否存在某种“给予价值”和“通过参考”的区别?

4

1 回答 1

1
 my_local_object=my_global_object;

将变量引用的对象的引用分配给这里my_global_object的变量my_local_object。所以现在两个变量都引用同一个对象。

my_local_object.name=new_name;

更新name由两个变量引用的对象的属性my_global_objectmy_local_object因此my_global_object.name将与my_local_object.name.

my_local_object=my_local_object.children[child_name];

将变量my_local_object引用分配给 引用的对象my_local_object.children[child_name]。所以现在my_local_objectvariable 不指向由my_global_object variable 引用的对象。

于 2013-04-17T09:28:35.437 回答