2015-04-09 17 views
5

Vor ein paar Minuten, während ich mit Javascript spielte, bemerkte ich ein seltsames Verhalten von console.log(). Tatsächlich scheint es "verzerrte" Variablen zu geben. Werfen Sie einen Blick auf die folgenden:Merkwürdiges Verhalten von console.log() auf Firefox 37

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>

Er druckt korrekt Variablen in #res aber nicht in den Browser-Konsole (Firefox 37)

enter image description here

Könnte jemand mir erklären, warum diese das passiert?

+0

Meine Browser-Ausgabe und Konsole stimmen in Chrome überein. – j08691

+0

Ich verstehe nicht, warum meine Frage als Duplikat markiert ist, während es sich auf Firefox statt Chrome bezieht. – DrKey

+1

Es ist das gleiche grundlegende Problem, also kann ich die doppelte Entscheidung sehen. – JasonMArcher

Antwort

2

Also, wenn Sie Ihre Protokollierung ändern, so dass Sie eine Kopie des Arrays unter:

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

Alles funktioniert wie erwartet.

Ich bin Diskontierung „leben“ als Möglichkeit Tracking, weil das folgende Beispiel keine Beweise für Live-Tracking nicht angezeigt:

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);

bedeutet dies, dass die Protokollierung die Warteschlange gestellt wird und Die Warteschlange wird erst nach dem letzten Push zum Array ausgeführt (wahrscheinlich bis Ihr Javascript fertig ist).

Nice find ... auf jeden Fall etwas, das Entwickler auffallen könnte.

+0

Ja, ich habe vor einiger Zeit in Chrome ein ähnliches Verhalten bemerkt. Ich bin mir nicht sicher, wie das Logging funktioniert, aber es könnte ereignisbasiert sein. In diesem Fall könnte irgendwo eine Art von Race Condition sein. –

Verwandte Themen