2010-02-15 62 views
4

我有這樣的代碼JavaScript是否通過引用或按值處理對象?

var myObjects = {}; //global variable 

//Later on in the code: 
for (i in myObjects) 
{ 
    var obj = myObjects[i]; 
    process(obj); 
} 

function process(obj) 
{ 
    $.getJSON("example.com/process/", {id: obj.id}, function(result) 
     { 
      //Will the following change the permanent/global copy e.g 
      // myObjects[44] ? 
      obj.addItem(result.id, result.name, result.number); 
     } 
    ); 
} 

將下面一行:

 obj.addItem(result.id, result.name, result.number); 

通過值或引用修改對象,即會對其進行修改的obj或e.g myObjects[44]本地副本?

如果它隻影響本地副本,我怎麼能改變它的全局副本?

回答

4

原始變量在JavaScript中通過值傳遞,但對象通過引用傳遞。

源和進一步閱讀:

+2

請注意,它比這更小一些:如果通過調用「new String('hi mom')」創建一個字符串,那麼它有時會像字符串一樣工作,但它會像參數傳遞的對象那樣工作。也就是說,它是通過引用傳遞的。 – Pointy 2010-02-15 16:36:20

+1

實際上,字符串在js中是不可變的。因此,你總是通過引用傳遞它們。對字符串的所有操作都會返回一個新字符 – 2010-02-15 19:39:00

+1

在JavaScript中,當你傳遞一個對象時,你確實是通過值傳遞了一個對象引用。請參閱[早期問題](http://stackoverflow.com/a/518069/379428)。 – Andrew 2012-12-10 23:36:10

1

JavaScript是通過值傳遞,如已經澄清在earlier question。 (有更多權力的人應該將其標記爲重複 - 這裏的答案是不正確的。)