Quando provo a eseguire il debug di questo codice (http://jsfiddle.net/QWFGN/)La raccolta dati javascript di Chrome funziona in modo diverso?
var foo = (function(numb) {
return {
bar: function() {
debugger;
return "something";
}
}
})(1);
foo.bar()
Developer strumento in Chrome si comporta in modo diverso rispetto e Firebug in Firefox e strumento di sviluppo in IE. Il problema è che la variabile numb
non è visibile nello strumento per sviluppatori di Chrome sulla riga debugger;
. Ma è visibile in Firebug e IE. Se provo a digitare numb
nella console di Chrome ottengo:
ReferenceError: numb is not defined
numb
, naturalmente, è visibile in questa chiusura, e se cambio codice (http://jsfiddle.net/QWFGN/1/)
var foo = (function(numb) {
return {
bar: function() {
debugger;
console.log(numb);
return "something";
}
}
})(1);
foo.bar()
numb
è ora visibile anche in Chrome e posso ottenere il valore 1
come risposta.
Quindi, la mia domanda è: Perché solo Google Chrome non vede le variabili di chiusura che non vengono mai utilizzate? Google Chrome ha la propria implementazione di Garbage Collection o è solo relativo all'implementazione dello strumento di debug in Google Chrome.
possibile duplicato di [Informazioni sulla chiusura, LexicalEnvironment e GC] (http://stackoverflow.com/questions/8665781/about-closure-lexicalenvironment-and-gc) o [Come vengono rappresentate le chiusure e gli ambiti in fase di esecuzione in JavaScript ] (http://stackoverflow.com/questions/5368048/how-are-closures-and-scopes-represented-at-run-time-in-javascript) – Bergi