Firefox 37上console.log()的奇怪行为

时间:2015-04-09 01:52:55

标签: javascript firefox browser

几分钟前,在玩javascript时,我注意到了console.log()的奇怪行为。实际上它似乎记录了“扭曲”的变量。请看以下内容:

var res = document.getElementById("res");
var arr = ["1", "2", "3"];
arr.push("4");
res.innerHTML = JSON.stringify(arr)+'<br>';
console.log(arr);
arr.push("5");
res.innerHTML += JSON.stringify(arr);
console.log(arr);
<div id="res"></div>

它将正确的变量打印到#res但不打印到浏览器控制台(Firefox 37)

enter image description here

有人可以解释一下为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

因此,如果您更改日志记录以便获取数组的副本:

var arr = ["1", "2", "3"];
arr.push("4");
console.log(arr.slice());
arr.push("5");
console.log(arr.slice());

一切都按预期工作。

我将“实时”跟踪作为一种可能性进行折扣,因为以下示例未显示任何实时跟踪的证据:

var arr = ["1", "2", "3"];
console.log(arr);
var i;
i = setInterval(function(){
  arr.push(1);
  console.log(arr);
  if(arr.length>10)clearInterval(i)
},1000);

这意味着日志记录已排队,并且队列在最后一次推送到阵列之后才会运行(可能直到你的javascript完成执行)。

很好找......绝对可能会让开发人员感到惊讶。