【发布时间】:2017-06-22 02:04:45
【问题描述】:
我目前正在阅读 Trevor Burnham 的 Async Javascript。到目前为止,这是一本很棒的书。
他谈到这个 sn-p 和 console.log 在 Safari 和 Chrome 控制台中是“异步”的。不幸的是,我无法复制这一点。代码如下:
var obj = {};
console.log(obj);
obj.foo = 'bar';
// my outcome: Object{}; 'bar';
// The book outcome: {foo:bar};
如果这是异步的,我预计结果将是书籍结果。 console.log() 被放入事件队列中,直到所有代码都被执行,然后它被运行并且它会有 bar 属性。
虽然它是同步运行的,但它似乎是。
我运行这段代码错了吗? console.log 实际上是异步的吗?
【问题讨论】:
-
@thefourtheye:不,所以我应该删除我的评论。
-
我已经看到它发生在 Chrome 中。如果您 console.log 一个简单的对象,然后立即更改对象中的某些内容,
console.log()并不总是显示前一个值。如果发生这种情况,解决方法是将您尝试的任何内容转换为console.log()为不可变的字符串,因此不受此问题的影响。因此,根据经验console.log()有一些异步问题可能与跨进程边界封送数据有关。这不是预期的行为,而是console.log()在内部工作方式的一些副作用(我个人认为这是一个错误)。 -
@bergi 我只花了 10 分钟就找到了这个骗子(虽然我知道确切的名字),可能是因为它是封闭的。难道我们不能只交换副本,让另一个成为被骗者...?
-
@JonasWilms 我现在重新打开了这个问题(请参阅history)。我不认为它们是相互重复的,我使用 Is Chrome's JavaScript console lazy about evaluating arrays? 作为专门涉及数组的问题的规范目标。