在Chrome控制台中,似乎第2行在第1行之前执行。为什么呢?
function fn(obj){
console.log(obj);
obj.a = 1;
}
fn({b:1}); // prints {a:1, b:1} in console! WHAT!!!
fn({}); // prints {}. OMG. WHAT. This is inconsistent with above behaviour!
这个DOESN&#T; T发生在Edge控制台中。
答案 0 :(得分:2)
您正在将对象记录到控制台。无论您记录什么,都是对实际对象的引用。由于您更新了对象,因此引用将反映最新值。
要进行测试,您可以在设置obj.a之前尝试记录它。
答案 1 :(得分:1)
这似乎是Chrome devtools控制台的 bug 功能。例如,如果您运行此代码段,则会获得
{
"b": 1
}
但是,如果您同时打开Chrome控制台,您将得到以下内容:
{b: 1}
a:1
b:1
正如您所看到的,第一行反映了记录时的obj
状态,但是当您点击它时,它的内容似乎会更新。
在记录对象右侧还有一个蓝色信息工具提示,上面写着:“下面的值刚才进行了评估”,确认这是一个功能,而不是一个错误。
function fn(obj){
console.log(obj);
obj.a = 1;
}
fn({b:1});
答案 2 :(得分:0)