我有这样的代码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]
本地副本?
如果它只影响本地副本,我怎么能改变它的全局副本?
请注意,它比这更小一些:如果通过调用“new String('hi mom')”创建一个字符串,那么它有时会像字符串一样工作,但它会像参数传递的对象那样工作。也就是说,它是通过引用传递的。 – Pointy 2010-02-15 16:36:20
实际上,字符串在js中是不可变的。因此,你总是通过引用传递它们。对字符串的所有操作都会返回一个新字符 – 2010-02-15 19:39:00
在JavaScript中,当你传递一个对象时,你确实是通过值传递了一个对象引用。请参阅[早期问题](http://stackoverflow.com/a/518069/379428)。 – Andrew 2012-12-10 23:36:10