2015-04-09 15 views
5

Alcuni minuti fa, mentre giocavo con javascript, ho notato uno strano comportamento di console.log(). In effetti sembra di registrare variabili "distorte". Date un'occhiata al seguente:Strano comportamento di console.log() su 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>

Esso stampa variabili corrette in #res ma non in console del browser (Firefox 37)

enter image description here

Potrebbe qualcuno perché questo spiegare accade?

+0

L'output del mio browser e la console corrispondono in Chrome. – j08691

+0

Non capisco perché la mia domanda sia contrassegnata come duplicata mentre si riferisce a Firefox anziché a Chrome .. – DrKey

+1

È lo stesso problema di base, quindi posso vedere la decisione duplicata. – JasonMArcher

risposta

2

Quindi, se si cambia la registrazione in modo che si sta prendendo una copia della matrice:

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

Tutto funziona come previsto.

che sto scontando "live" di monitoraggio come una possibilità, perché il seguente esempio non presenta alcuna evidenza di live tracking:

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

Ciò implica che la registrazione è in coda e la coda non viene eseguita fino a dopo l'ultima pressione sull'array (probabilmente fino a quando il javascript non ha completato l'esecuzione).

Bella scoperta ... sicuramente qualcosa che potrebbe catturare gli sviluppatori.

+0

Sì, ho notato un comportamento simile qualche tempo fa in Chrome, non sono molto sicuro di come funziona la registrazione ma potrebbe essere basato su eventi. In questo caso, potrebbe esserci qualche tipo di condizione di gara da qualche parte. –