В использовании $
переменных нет ничего плохого . Я бы не стал делать это специально для каждой переменной, но это все еще допустимый синтаксис. jQuery является одним из примеров, где $
используется в качестве имени переменной. Вот почему «инструменты разработчика Chrome не всегда видят, что это ошибка Javascript» , потому что, во-первых, ошибки нет.
Если вы боитесь писать код вроде:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
тогда вы должны использовать средство проверки стиля, такое как jsLint , jsHint или Google Closure Linter . Какой из них? Вам решать сделать выбор. Чтобы помочь вам с этим, вот несколько заметок:
Стиль
Google Closure Linter следует Руководству по стилю Google JavaScript , о котором известно, что оно сделано умно. Хорошим вариантом является использование хорошо известного стиля для JavaScript или любого из шести других языков : когда вы делитесь своим кодом или нанимаете нового разработчика, скорее всего, они уже знакомы с этим стилем.
Многим разработчикам знаком и стиль Дугласа Крокфорда. Этот стиль подробно объясняется в JavaScript: The Good Parts , книга, которую стоит купить любому, кто работает с JavaScript.
Что касается jsHint, я не могу найти, какие соглашения используются, и сам сайт, кажется, избегает говорить на эту тему. Может быть, я что-то пропустил.
Поддержка IDE
И jsLint, и jsHint поддерживаются PhpStorm. Это также относится и к Google Closure Linter.
Окружающая обстановка
Google Closure Linter является одним из серии инструментов . Если вы уже используете Google Closure Compiler или Google Closure Library , было бы предпочтительнее выбрать Closure Linter над другими инструментами.
взыскательность
jsLint, как известно, строгий. jsHint более терпим, что не всегда хорошо. Например, одна из причин для разветвления jsLint для jsHint объясняется в статье, в которой показан плохой код, который приведет к ошибке в jsLint, но не в jsHint:
/*global jQuery */
// Example taken from jQuery 1.4.2 source
jQuery.extend({
/* ... */
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
/* ... */
});
Код плохой, потому что похоже, что JavaScript имеет область видимости блока, а его нет. См. JavaScript: Хорошие части, с. 102, Приложение A: Ужасные Части, Область применения. Другими словами, глядя на код, не зная языка, мы ожидаем, name
что он не будет виден вне цикла, пока он останется видимым.
Что касается Google Closure Linter, я считаю, что он находится где-то посередине между jsLint и jsHint, но у меня недостаточно информации для его поддержки.
Вывод
Я бы избегал jsHint: он слишком разрешительный, что означает, что он не найдет потенциальных ошибок, которые обнаружат другие линтеры. Руководство по стилю, которое используется, трудно найти.
Среди jsLint и Google Closure Linter выбор не очевиден. Оба написаны экспертами, оба следуют строгому, хорошо описанному руководству по стилю, которому уже следуют тысячи разработчиков. Используйте оба в течение некоторого времени, затем выберите тот, который более практичен для вас.