2013-04-09 123 views
3
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的傳遞對象到函數

+0

在第一個函數中,您將null分配給變量'x',而不是'o'。如果你想把它分配給'o',你必須通過引用來傳遞它。 – enenen 2013-04-09 11:13:10

回答

4
(function(x){ 
    x=null 
})(o); 

x「點」到o,但你只是分配x指向另一件事,null從而不改變o

(function(x){ 
    x.foo = "foo"; 
    x.bar = "bar"; 
})(o); 

在這段代碼中,你正在改變一切的x所指向特性(添加foobar),這將是o。此更改將反映到o

5

第1行:創建一個對象。對其的引用傳遞給o

第2行:函數被調用。對該對象的引用作爲參數傳遞。然後用null(不接觸物體本身或其仍然分配給o的引用)覆蓋參考(在x中)。

第3行:函數被調用。對該對象的引用作爲參數傳遞。將foobar屬性添加到對象和分配的值。

+0

我只是想有沒有辦法從閉包中刪除對象而不返回... – VisioN 2013-04-09 11:20:46