var o = {};
(function(x){x=null})(o); //o is NOT null after this statement
(function(x){x.foo = "foo"; x.bar = "bar";})(o) //o has properties foo and bar after this statement
傳遞對象當o到函數是怎麼回事?第一個函數看起來沒有通過;第二個功能使得它看起來Ø獲得通過JavaScript的傳遞對象到函數
var o = {};
(function(x){x=null})(o); //o is NOT null after this statement
(function(x){x.foo = "foo"; x.bar = "bar";})(o) //o has properties foo and bar after this statement
傳遞對象當o到函數是怎麼回事?第一個函數看起來沒有通過;第二個功能使得它看起來Ø獲得通過JavaScript的傳遞對象到函數
(function(x){
x=null
})(o);
x
「點」到o
,但你只是分配x
指向另一件事,null
從而不改變o
。
(function(x){
x.foo = "foo";
x.bar = "bar";
})(o);
在這段代碼中,你正在改變一切的x
所指向特性(添加foo
和bar
),這將是o
。此更改將反映到o
。
第1行:創建一個對象。對其的引用傳遞給o
。
第2行:函數被調用。對該對象的引用作爲參數傳遞。然後用null
(不接觸物體本身或其仍然分配給o
的引用)覆蓋參考(在x
中)。
第3行:函數被調用。對該對象的引用作爲參數傳遞。將foo
和bar
屬性添加到對象和分配的值。
我只是想有沒有辦法從閉包中刪除對象而不返回... – VisioN 2013-04-09 11:20:46
在第一個函數中,您將null分配給變量'x',而不是'o'。如果你想把它分配給'o',你必須通過引用來傳遞它。 – enenen 2013-04-09 11:13:10