#javascript #google-chrome #debugging
#javascript #google-chrome #отладка
Вопрос:
Я заметил некоторое странное поведение при использовании ключевого слова debugger в Chrome 35 (см. Фрагмент ниже или JSFiddle):
function Person (settings) {
// ....
settings.init();
}
var anchors = document.querySelector('a');
var bob = new Person({
init: function () {
debugger;
}
});
Я заметил, что проверка значения ‘anchors’ в консоли в точке останова отладчика возвращала ошибку ReferenceError, указывающую, что anchors не определен. Однако, когда я проверил привязки к точке останова отладчика этого фрагмента (JSFiddle):
function Person (settings) {
// ....
settings.init();
}
var anchors = document.querySelector('a');
var bob = new Person({
init: function () {
debugger;
console.dir(anchors);
}
});
возвращены якоря, null
что является разумным значением для document.querySelector
возврата. anchors, скорее всего, существует в области действия анонимной функции. Это ошибка в Chrome или ожидаемое поведение?
Комментарии:
1. Я полагаю, если я не ошибаюсь, это связано со сборкой мусора. Поскольку
anchors
на него больше нигде нет ссылок, он не сохраняет его. Обратите внимание, что если вы измените вызов функции после debugger на что-либо, кромеeval
или любого оператора, который не ссылается,anchors
он не будет отображатьсяanchors
как определенный. Но как только вы вводитеeval
вызов или ссылку на вызов,anchors
затем отображается как определенное значение null.anchors
2. @PatrickEvans но если анонимная функция не содержала ссылок на якоря, и я поставил фактическую точку останова в строке функции, тогда якоря были бы доступны мне, когда я регистрирую их в консоли или просматриваю. Ключевое слово debugger не функционирует как обычная точка останова?
3. Что ж, продолжая тестирование, моя теория сборки мусора неверна. Но мой список наблюдения не отображается
anchors
как определенный, когда он остановлен вinit
функции или в закрытии, которое на него не ссылается. Таким образом, это может быть ожидаемым поведением, поскольку на него нет ссылки, отладчик не утруждает себя просмотром его или перечислением в переменных области видимости. Но это тоже всего лишь теория, я пока ничего не нашел, что объясняло бы такое поведение.