我目前正在阅读Trevor Burnham的Async Javascript.到目前为止,这是一本很棒的书.
他谈到这个片段和console.log在Safari和Chrome控制台中是"异步"的.不幸的是我不能复制这个.这是代码:
var obj = {};
console.log(obj);
obj.foo = 'bar';
// my outcome: Object{}; 'bar';
// The book outcome: {foo:bar};
Run Code Online (Sandbox Code Playgroud)
如果这是异步,我会预期结果将成为书籍的结果.console.log()被放入事件队列中,直到执行完所有代码,然后运行它并具有bar属性.
虽然它正在同步运行但它似乎出现了.
我运行此代码错了吗?console.log实际上是异步吗?
JavaScript是否具有未定义的行为(类似于C),还是完全由规范定义,并且确定性?
请注意,我正在丢弃实现错误和规范差异.我也在丢弃像Math.random()和的东西Date.now().
是否有一段JavaScript代码的行为不完全由JavaScript规范决定,因此具有"未定义的行为"?
我将从 Python 转向 Javascript。在 Python 中,如果使用列表或字典作为函数的默认参数,则每次调用都会看到相同的对象。所以如果你有一个像这样的函数:
def append_to_list(lst=[]):
lst.append(1)
return lst
Run Code Online (Sandbox Code Playgroud)
然后这样称呼它:
lst1 = append_to_list()
lst2 = append_to_list()
Run Code Online (Sandbox Code Playgroud)
lst2将会有价值[1, 1]而不仅仅是[1]
Javascript 对于默认参数也有同样的问题吗?