在您的代碼:
> function setName(obj) {
在調用的第一個參數的值分配給本地變量OBJ。如果一個對象被傳遞,obj的值是對該對象的引用。
> obj.name = "raziq";
這將分配值「阿卜德拉」傳遞給OBJ對象的名財產。如果名稱屬性不存在,則會創建該屬性。
> obj = new Object();
此分配一個新對象的引用作爲OBJ值,所以它不再引用傳遞給函數的對象。
> obj.name = "abdul";
該值「阿卜杜勒」分配給名稱屬性(創建如果它不存在它的屬性)由OBJ(創建並分配在線之上的新引用的對象的)。
由於沒有其他參考這個對象,它只要在函數結束可供垃圾收集。
> }
>
> var person = new Object();
創建一個新對象,並將其分配給變量人。 人的值是對新對象的引用。
> setName(person);
呼叫的setName並將其傳遞上面的行創建的對象。功能分配阿卜德拉到對象的名稱屬性(見上文)。
> alert(person.name); //still yields raziq
警報上面創建並分配給人對象的名稱屬性的值。由於raziq被分配爲值,這就是返回的內容。
需要注意的是一個新的對象是在函數創建並賦值語句創建名屬性,但對象不是任何地方分配或從函數返回,所以一切後:
obj = new Object();
無效。
請注意,這是比較常見的寫:
obj = {};
具有完全相同的結果作爲前行,但少打字和更廣泛的使用,因此有可能(略)更容易閱讀和維護。
你爲什麼要創建的setName內的新對象? –
@ThomasWood爲了說明問題 – Phil
以查看它是否將person對象更改爲函數外部,因爲如果通過引用傳遞對象,則函數內部的新對象應該反映在函數isn'之外,它呢? –