请解释为什么在本地范围内更改全局对象字符串属性确实会影响全局范围内的属性,但为整个对象提供新值则不会。
在我的示例中,当我第一次运行 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;
是否存在某种"给出价值"和"传递引用"的区别?
my_local_object=my_global_object;
将变量 my_global_object
引用的对象引用分配给变量my_local_object
此处。所以现在两个变量都引用同一个对象。
my_local_object.name=new_name;
更新对象的 name
属性,该属性由变量 my_global_object
和 my_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_object
变量不指向变量引用的对象my_global_object
。