我仍然倾向于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对象是某种增强字符串。
答案 0 :(得分:3)
我希望文件列表对象以某种方式被复制"一旦它被发送到该功能。为什么更改原始对象会影响回调?
简单回答:它没有被复制。您正在改变名为values
的对象并存储对该对象的引用,因此每个引用都指向同一个对象。
答案 1 :(得分:0)
对于第一种情况,您必须在函数内创建副本。
对于第二个,使用" var值"指定此变量的范围到循环。如果你不这样做,那么价值将被视为全球价值。