Предотвращение автоматического создания глобальных переменных в Javascript - PullRequest
4 голосов
/ 21 сентября 2009

Я просто потратил некоторое время на отладку проблемы, которая сводилась к тому, что я забыл использовать ключевое слово var перед новым идентификатором переменной, поэтому Javascript автоматически создавал эту переменную в глобальной области видимости. Есть ли способ предотвратить это или изменить поведение по умолчанию, не используя такой валидатор, как JSLint?

Запуск валидатора между написанием и выполнением кода Javascript кажется плохим оправданием для компиляции, и это шаг, на который я обычно полагаюсь, чтобы поймать подобные вещи.

Я предполагаю, что ответ "нет", поэтому я смотрю на плагин JSLint Eclipse, когда выкладываю это.

Ответы [ 6 ]

5 голосов
/ 21 сентября 2009

ES5 строгий режим предотвращает автоматическое создание глобальных переменных, но, вероятно, пройдет год, прежде чем появятся какие-либо браузеры доставки, которые распознают строгий режим, поэтому JSLint, вероятно, будет лучшим выбором до тех пор: - /

3 голосов
/ 21 сентября 2009

Проверьте этот удобный букмарклет, созданный Реми Шарпом , вы можете использовать его, чтобы проверить, не вышли ли какие-либо переменные из глобального пространства имен.

2 голосов
/ 21 сентября 2009

Не то, что я знаю - разработчики JS исторически были против добавления «ремней безопасности» в основной язык, поэтому они были реализованы во внешних инструментах, таких как JSLint. Вы можете добавить JSLint в процесс сборки / тестирования через версию Rhino и заставить тестовый набор не работать, если JSLint сообщает об ошибках.

1 голос
/ 22 сентября 2009

Некоторое время назад я сделал букмарклет для проверки и обнаружения глобальных переменных.

альтернативный текст http://yura.thinkweb2.com/detect_global.png

Он также имеет некоторые дополнительные функции (такие как фильтрация свойств Prototype.js или Google Analytics).

1 голос
/ 21 сентября 2009

Ответ действительно нет - но вы могли бы использовать плагин Eclipse, как вы сказали, который, насколько я знаю, может работать при сохранении и т. Д., Поэтому он не потребует дополнительных шагов.

IntelliJ IDEA также может обнаруживать необъявленные переменные. IntelliJ делает это в режиме реального времени, когда вы печатаете, а также может анализировать ваш jslint-стиль кода. Возможно, есть и другие альтернативы.

0 голосов
/ 21 сентября 2009

Установите Firebug и включите его на своем сайте. Он будет жаловаться каждый раз, когда вы создаете глобал без var, а также в некоторых других ситуациях, которые вы можете или не захотите поймать.

Вы также можете сделать это, используя параметр about:config javascript.options.strict, но, поскольку он глобален, он повлияет и на все другие сайты, которые вы просматриваете.

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