請解釋爲什麼在本地作用域中更改全局對象字符串屬性確實會影響全局作用域中的屬性,但是爲整個對象賦予新的值不會。爲什麼在本地給全局JavaScript對象賦值時有所不同?
在我的例子中,我第一次運行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;
有沒有某種「給予價值」和「傳遞引用」的區別?
請解釋你的第一行。你在哪裏更改了代碼中的全局對象? – NINCOMPOOP
在changeMyName函數中,我將全局對象分配給本地對象,並更改其名稱屬性的值。如果我在那之後記錄了my_global_object,它就有我傳遞給該函數的名稱。 –