nie ma nic złego w używaniu $
w zmiennych. Nie robiłbym tego celowo na każdej zmiennej, ale nadal jest to prawidłowa składnia. jQuery jest jednym z przykładów, gdzie $
jest używana jako nazwa zmiennej. Dlatego też „Chrome dev tools nie zawsze widzi, że jest to błąd Javascript”, ponieważ w pierwszej kolejności nie ma błędu.
jeśli boisz się pisać kod jak:
var demo = function demo() { var a = 123; ... $a = 456; // A new variable is created in global scope.}
następnie musisz użyć kontrolera stylu, takiego jak Jslint, jsHint lub Google Closure Linter. Który z nich? Wybór należy do ciebie. Aby ci w tym pomóc, oto kilka uwag:
Style
Google Closure Linter podąża za przewodnikiem po stylu JavaScript Google, znanym z sprytnego wykonania. Używanie dobrze znanego stylu JavaScript lub dowolnego z sześciu innych języków jest dobrym pomysłem: kiedy udostępniasz swój kod lub zatrudniasz nowego programistę, są szanse, że są już zaznajomieni z tym stylem.
wielu deweloperów zna również styl Douglasa Crockforda. Ten styl jest szczegółowo wyjaśniony w JavaScript: dobre części, książka warta zakupu przez każdego, kto pracuje z JavaScript.
co do jshinta to nie bardzo mogę znaleźć jakie konwencje są używane, a sama strona zdaje się unikać mówienia o tym temacie. Może coś przeoczyłem.
obsługa przez IDEs
zarówno jsLint, jak i jsHint są obsługiwane przez PhpStorm. Tak jest również w przypadku Google Closure Linter.
środowisko
Google Closure Linter jest jednym z szeregu narzędzi. Jeśli używasz już Google Closure Compiler lub Google Closure Library, lepiej byłoby wybrać Closure Linter zamiast innych narzędzi.
ścisłość
jsLint jest znany jako ścisły. jsHint jest bardziej permisywny, co nie zawsze jest dobre. Na przykład, jeden z powodów fork jsLint dla jsHint jest wyjaśniony w artykule, który pokazuje zły kod, który spowoduje błąd w jsLint, ale nie w jsHint:
/*global jQuery */// Example taken from jQuery 1.4.2 sourcejQuery.extend({ /* ... */ isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; } /* ... */});
kod jest zły, ponieważ wygląda na to, że JavaScript ma blokowy zakres, podczas gdy go nie ma. Zobacz JavaScript: the Good Parts, str. 102, Dodatek A: Okropne Części, Scope. Innymi słowy, patrząc na kod bez znajomości języka, oczekujemy, że name
nie będzie widoczny poza pętlą, podczas gdy pozostanie widoczny.
co do Google Closure Linter, to uważam, że jest gdzieś pośrodku między jsLint i jsHint, ale nie mam wystarczająco dużo informacji, aby to poprzeć.
podsumowanie
unikałbym jsHint: jest zbyt permisywny, co oznacza, że nie znajdzie potencjalnych błędów, które wykryją inni linterzy. Przewodnik po stylu, który jest używany, jest trudny do znalezienia.
wśród Jslint i Google Closure Linter wybór nie jest oczywisty. Oba są pisane przez ekspertów, oba są zgodne z surowym, dobrze opisanym przewodnikiem po stylu, za którym podążają tysiące programistów. Używaj obu przez jakiś czas, a następnie wybierz taki, który jest dla ciebie bardziej praktyczny.