下面的代码将input_data
声明为const
变量,该变量在执行期间不会被修改。我希望每个console.log
都会输出3次相同的内容,但事实并非如此。
此代码经过修改,以最小化且易于理解,并反映了实际代码中使用的功能和承诺。您能告诉我这种情况的发生方式和原因,还可以显示一个有效的代码,该代码具有不会修改该const
变量的相同结构
const platform = "test";
const input_data = {
"test": true
};
function verify(data) {
let cmd = input_data;
cmd.valid = true;
return cmd;
}
console.log("#req", input_data);
let command = verify(input_data);
console.log("#req", input_data);
new Promise((resolve, reject) => {
command.executed = true;
resolve("successs")
}).then(result => {
console.log("#req", input_data);
});
下面是我得到的输出
#req { test: true }
#req { test: true, valid: true }
#req { test: true, valid: true, executed: true }
应该是这样
#req { test: true }
#req { test: true }
#req { test: true }
答案 0 :(得分:1)
当您执行kubectl get all --all-namespaces
时,将引用“ input_data”对象。意味着对let cmd = input_data
的任何更改都将反映在cmd
中。
您可以通过创建一个新对象来防止这种情况。
input_data
let cmd = Object.assign({}, input_data, {valid: true})
所以最终的代码应该是
let cmd = {...input_data, valid: true}