我正在尝试使用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 StackOverflow问题。
第二个和第三个问题说
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);
关于javascript - 关于“console.log”在流行浏览器中的执行延迟的最新行为是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47062892/