为什么我的对象在源变量更改时会更新?

时间:2015-07-18 15:11:20

标签: javascript json

我仍然倾向于Javascript,我遇到了两次我没想到的行为。我想了解它为什么会发生以及我应该学会更好地理解它。

First case :我尝试使用文件输入filelist作为参数调用函数。在我调用我的函数后,我将null设置为文件输入值。在我的函数中,我使用了一个回调函数,因为文件输入被重置后无法返回我的fileList。

我不明白的事情:

我希望文件列表对象在被发送到函数后以某种方式“复制”。为什么更改原始对象会影响回调?

第二种情况:我使用名为values的JSON对象来存储值。我迭代一个集合并使用迭代索引更新name对象的values字段,然后将values对象插入另一个JSON对象中。见代码:

var myBaseName = "file"
_.each (myCollection, function(file, i){
    values.name = myBaseName  + " - " + i
    console.log(values.name); //here the name appears correctly, 
                              //i.e. "file - 0", "file - 1"...
    values.size = file.size,
    values.type = file.type,
    allFiles[i]=values; 
});
console.log (allFiles);//here the name appears as the last set, 
                       //i.e. if my collection has 2 objects; 
                       //they both appear as "file - 1"

我不明白的事情:

为什么要更新而不是简单地复制?我希望这是与我的第一种情况相同的机制。我曾经在.net中编码,我从未遇到过这样的行为。我希望json对象是某种增强字符串。

2 个答案:

答案 0 :(得分:3)

  

我希望文件列表对象以某种方式被复制"一旦它被发送到该功能。为什么更改原始对象会影响回调?

简单回答:它没有被复制。您正在改变名为values的对象并存储对该对象的引用,因此每个引用都指向同一个对象。

答案 1 :(得分:0)

对于第一种情况,您必须在函数内创建副本。

对于第二个,使用" var值"指定此变量的范围到循环。如果你不这样做,那么价值将被视为全球价值。