我目前正在阅读Trevor Burnham所著的Async Javascript。这是一本非常好的书。
他讨论了在Safari和Chrome控制台中,代码片段和console.log都被认为是“异步”的。不幸的是,我无法复制这个结果。以下是代码:
var obj = {};
console.log(obj);
obj.foo = 'bar';
// my outcome: Object{}; 'bar';
// The book outcome: {foo:bar};
如果这是异步的话,我会预期结果是书的结果。console.log()会被放入事件队列,直到所有代码都被执行完毕,然后它才会运行并具有bar属性。
但看起来它正在同步运行。
我是在错误地运行此代码吗?console.log实际上是异步的吗?
console.log()
打印一个简单的对象并立即更改对象中的内容,console.log()
不总是会显示先前的值。如果你遇到了这种情况,解决方法是将你想要打印的任何内容转换为字符串,因为字符串是不可变的,所以不会受到此问题的影响。基于经验,console.log()
存在一些异步问题,可能与在进程边界之间传递数据有关。这不是预期的行为,但是是console.log()
内部工作方式的一些副作用(我个人认为这是一个错误)。 - jfriend00