【发布时间】:2015-08-07 06:19:12
【问题描述】:
我发现,在嵌套对象上使用 console.log 时,结果似乎是在执行后续操作后打印的,但仅在记录深度至少为 2 的对象时才打印。
考虑以下示例:
function addNumbers(data) {
data.container.firstNumber++
console.log(data); // 3
data.container.firstNumber++
}
var numberData = {
container : {
"firstNumber": 1
}
};
console.log(numberData); // 3
addNumbers(numberData);
我假设在这个例子中我会看到 numberData 打印的值是 1,然后是 2。实际上,值是 3、3。我的第一个想法是这里可能存在一些竞争条件,其中值在日志之前发生变化操作可以完成,但是如果你给对象添加更具体的引用,你会得到与console.log在代码中的位置相匹配的值,如下所示:
function addNumbers(data) {
data.container.firstNumber++
console.log(data.container); // 2
data.container.firstNumber++
}
var numberData = {
container : {
"firstNumber": 1
}
};
console.log(numberData.container); // 1
addNumbers(numberData);
为什么在第一个示例中变量不计算相对于 console.log 位置的值,而在第二个示例中呢?
【问题讨论】:
-
实际上,console.log object at current state 包含一个无效示例。也许从那以后的 4 年里,console.log 的行为发生了变化,但是当必须扩展对象以显示该值时,console.log 中的值对我来说是不同的。
标签: javascript