2010-02-15 65 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。 (有更多权力的人应该将其标记为重复 - 这里的答案是不正确的。)