var state = {
item1 : {
text : "hi hi"
}
}
var i = 5;
function test() {
state.item1.text = i;
console.log(state)
i--
if (i >= 0) {
setTimeout(test, 1000);
}
}
test();
有一个非常奇怪的问题,当更新这个json对象时,它没有显示正确的值。任何帮助深表感谢。如果我要控制日志console.log(state.item1)
,它将打印正确的值。但console.log(state)
显示的值不正确。
答案 0 :(得分:2)
console.log()
不存储对象的副本。相反,当您展开嵌套属性时,它将读取每个属性的当前值。
由于您的代码会改变同一个对象,因此在所有超时之后展开已记录的对象会显示最终值。
答案 1 :(得分:2)
Javascript中的对象通过引用传递。当项目打印到控制台时,您将看到对象处于当前状态,而不是打印出来时的状态。如果要在控制台中展开对象,则会看到每个记录项目的state.item1
的文本值为0。
这个答案在这个问题上有一些很好的对话:Javascript by reference vs. by value