Kiedy próbuję debugować kod (http://jsfiddle.net/QWFGN/)Czy usuwanie elementów javascript w przeglądarce Chrome działa inaczej?
var foo = (function(numb) {
return {
bar: function() {
debugger;
return "something";
}
}
})(1);
foo.bar()
narzędzie dla programistów w Chrome zachowuje się inaczej niż Firefox i Firebug i narzędzia deweloperskiego w IE. Problem polega na tym, że zmienna numb
nie jest widoczna w narzędziu programisty Chrome na linii debugger;
. Jest jednak widoczny w Firebug i IE. Gdy próbuję wpisać numb
w konsoli Chrome uzyskać:
ReferenceError: numb is not defined
numb
, oczywiście, jest widoczny w tym zamknięcia, a jeśli kod do (http://jsfiddle.net/QWFGN/1/)
var foo = (function(numb) {
return {
bar: function() {
debugger;
console.log(numb);
return "something";
}
}
})(1);
foo.bar()
numb
jest teraz widoczny również w Chrome i jako odpowiedź mogę uzyskać wartość 1
.
Moje pytanie brzmi: Dlaczego tylko Google Chrome nie widzi zmiennych zamknięcia, które nigdy nie są używane? Czy Google Chrome ma własną implementację Garbage Collection lub jest związany tylko z implementacją narzędzia do debugowania w przeglądarce Google Chrome.
możliwy duplikat [O zamknięciu, środowisku leksykalnym i GC] (http://stackoverflow.com/questions/8665781/about-closure-lexicalenvironment-and-gc) lub [Jak są zamknięte i zakresy reprezentowane w czasie wykonywania w JavaScript ] (http://stackoverflow.com/questions/5368048/how-are-closures-and-scopes-represented-at-run-time-in-javascript) – Bergi