ここに私の次のコードブロックがあります。私は、val
オブジェクトを関数test1
からtest2
に渡して、その値をtest2
に変更して送り返します。JS関数の可変スコープを理解できませんでした
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 }
Iヴァルの値は、私が唯一val1
ないval
を更新するにもかかわらず、すべての反復のために変更する理由を理解couldntの。 val
をそのまま維持し、「val1」のみを変更するにはどうすればよいですか?
javascriptオブジェクトは参照渡しされます。 [アンダースコア: 'dupe = _clone(obj)'](http://underscorejs.org/#clone) – Plato
私はそれを知っていませんでした悪い....魅力のように動作します!!!!!ありがとうございました –
'test1'の'新しいPromise'はまったく動作しません。あなたは 'Promise.all'を使用するべきです – Bergi