Перехват определения глобальной переменной в JavaScript - PullRequest
2 голосов
/ 08 августа 2011

Я пытаюсь привести в порядок некоторый код javascript, и одним из шагов является удаление всех бесполезных (или просто неправильных) глобальных переменных, которые проскальзывали из ошибок типа:

for (prop in obj) { ...

вместо

for (var prop in obj) { ...

JSLint немного помогает в обнаружении этой злобности, но она не на 100% надежна, когда злобность происходит во время выполнения. Я уже пытался добавить некоторый код мониторинга, который регулярно проверяет ведение журнала глобальной области действия в случае обнаружения какой-либо новой переменной, , и это помогло еще немного, но когда он говорит мне, что новая глобальная переменная с именем "i"был обнаружен ... ну, это беспорядок, выясняющий, где это произошло, в тысячах строк кода.

Итак, мы пришли: есть ли лучший способ / инструмент / сценарий / что-нибудь, чтобы найти маленькийвредители?Моя мечта - что-то вроде плагина Firebug, который останавливает выполнение при создании новой глобальной переменной ...

Спасибо!

Ответы [ 4 ]

3 голосов
/ 08 августа 2011

Вы можете найти этот букмарклет полезным.

Также зацените этот ответ: Как обнаружить создание новых глобальных переменных?

0 голосов
/ 15 сентября 2011

Вы говорите, что пытаетесь привести в порядок какой-то код. В этом случае - используйте IDE, например NetBeans PHP (бесплатно) или JetBrains WebStorm (30 $). Они оба окрашивают глобальные переменные и делают много других полезных вещей;) Если ваш скрипт опроса все равно обнаружит создание глобальных переменных - отследите нарушающие функции и заставьте их страдать;) В конце концов, код станет чистым.

0 голосов
/ 08 августа 2011

хорошо, я написал это давным-давно, поэтому код отстой, но он выполняет свою работу: https://gist.github.com/1132193 вставьте в консоль Firebug или включите в качестве сценария.

0 голосов
/ 08 августа 2011

Интересно, можете ли вы установить тайм-аут, чтобы создать список всех глобальных переменных, а затем сравнить его с последним, когда тайм-аут срабатывал. Я нашел это в переполнении стека, и, возможно, вы могли бы использовать этот код вместе с setTimeout (), чтобы получить то, что вы хотите.

Blockquote И да и нет. «Нет» почти в каждой ситуации. «Да», но только ограниченным образом, если вы хотите проверить глобальную область. Возьмите следующий пример: var a = 1, b = 2, c = 3;

for ( var i in window ) {
    console.log(i, typeof window[i], window[i]);
}

Ссылка переполнения стека: Получение всех переменных в области действия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...