这是我的以下代码块。我将val
对象从函数test1
传递到test2
并在test2
中修改其值并将其发回。
var Promise = require("bluebird");
var list = [1,2,3];
var test1 = function(test) {
return new Promise(function(resolve,reject) {
var val = {"name" : "my_name","age" : 25};
for (var item in list) {
(function (item) {
console.log("val",val);
test2(val)
.then(function(test2Response) {
console.log("test2Response",test2Response)
});
})(item)
}
});
};
var test2 = function(val1) {
return new Promise(function(resolve,reject) {
console.log("val1",val1)
val1.name = val1.name + "_1"
resolve(val1)
})
}
test1()
这是我在不同阶段的变量val
和val1
的价值。
val { name: 'my_name', age: 25 }
val1 { name: 'my_name', age: 25 }
val { name: 'my_name_1', age: 25 }
val1 { name: 'my_name_1', age: 25 }
val { name: 'my_name_1_1', age: 25 }
val1 { name: 'my_name_1_1', age: 25 }
test2Response { name: 'my_name_1_1_1', age: 25 }
test2Response { name: 'my_name_1_1_1', age: 25 }
test2Response { name: 'my_name_1_1_1', age: 25 }
我无法理解为什么每次迭代都会更改val的值,即使我只更新val1
而不是val
。如何保持val
完好无损并仅修改' val1`?
答案 0 :(得分:0)
当你将test2
传递给val1
时,它仍然是内存中的相同引用。您需要在传递给test2
之前克隆该值,这可以通过这样做来轻松完成,然后再调用test2
:
var copyOfVal = Object.assign({}, val) // this just creates a new object using the same contents of val but different references in memory.
然后将copyOfVal
传递给test2
,您将获得单独的结果。