gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:49:28 28 4
gpt4 key购买 nike

我正在尝试使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com