"console.log" 在流行浏览器中关于其执行延迟的最新行为是什么?

What is the latest behavior of "console.log" regarding its latency in execution, across the popular browsers?

我正在试验 JavaScript,最后我得到了这个片段:

var num = new Number(20);

function f(n) {
n["foo"] = "bar";   
} 

// the printed object has a "foo" property.
console.log(num, f(num));

我从没想过打印的对象会在 f(num) 调用中添加 foo 属性,因为 f(num)num 之后在我的 console.log 中(我正在使用 Chrome)。

但是那发生了,我的直接想法是 console.log 有点像 运行 所有参数并打印出结果之类的,所以我转到 MDN 的文档 console.log,但没有任何关于那个。

然后我偶然发现了 this Whosebug 问题。

第二个和第三个问题说 console.log 与对象一起使用时有点晚,但在那种情况下,以下代码段中的打印对象应该有一个 foo 属性(因为它是一个 Number 对象),它不会:

var num = new Number(20);

function f(n) {
n["foo"] = "bar";   
} 

// no "foo" property
console.log(num);
f(num);


我提到的问题的公认答案几乎说明了第二个和第三个答案所说的内容,除了它还声明该行为取决于控制台或浏览器。那么,现在不同的浏览器如何处理这类事情(这个问题来自 6 年前)? console.log 仅对超大对象是异步的吗?最初的问题是,为什么我第一个示例中的 num 打印出来时带有 foo 属性?

// the printed object has a "foo" property.
console.log(num, f(num));

此行为并非 console.log 所特有。函数的所有参数都在函数开始前被评估(按顺序)运行。由于 f(num)console.log 的参数,它在 console.log 有机会查看 num.

之前被调用

本质上,发生的事情是:

var arg1 = num;
var arg2 = f(num); // modifies num in place, so arg1 changes as well
console.log(arg1, arg2);