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

标签 javascript google-chrome firefox console console.log

我正在尝试使用 JavaScript,最终得到了这个片段:

var num = new Number(20);

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

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

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

但这件事发生了,我立即想到的是 console.log有点运行所有参数并打印出结果之类的,所以我转到 MDN 的文档 console.log ,但没有任何事情。

然后我偶然发现了this堆栈溢出问题。

第二个问题和第三个问题说 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属性(property)?

最佳答案

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

此行为并非特定于 console.log。在函数开始运行之前,函数的所有参数都会(按顺序)求值。由于 f(num)console.log 的参数,因此在 console.log 有机会查看 之前调用它编号.

本质上,发生的事情是:

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

关于javascript - 在流行的浏览器中, "console.log"关于执行延迟的最新行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47062892/

相关文章:

CSS:为什么我的表单提交按钮位于新行?

javascript - 第一次调用函数不会按预期工作,但下次可以工作

javascript - "@angular/http"和 "@angular/common/http"中的 Angular 的 httpClient 有什么区别?

javascript - 条件 if else 在哈巴狗中

c# - 如何在编辑模式 ASP .Net 中将日期选择器放入 Gridview

javascript - 如何向 Chrome/Chromium 浏览器添加一些内容?

javascript - 我可以通过单击重新加载扩展在本地模拟更新过程吗?

html - ltr 后的 css rtl 不适用于 chrome

javascript toUpperCase 在 Firefox 中不起作用

python - Firefox WebDriver 实例不是使用 selenium python 绑定(bind)创建的