der er ikke noget galt i at bruge $
i variabler. Jeg ville ikke gøre det med vilje på hver variabel, men det er stadig en gyldig syntaks. det er et af eksemplerne, hvor $
bruges som variabelnavn. Det er også grunden til, at “Chrome dev-værktøjer ikke altid ser, at dette er en Javascript-fejl”, fordi der ikke er nogen fejl i første omgang.
hvis du er bange for at skrive kode som:
var demo = function demo() { var a = 123; ... $a = 456; // A new variable is created in global scope.}
så skal du bruge en stilkontrol, som jsLint, jsHint eller Google Closure Linter. Hvilken af dem? Det er op til dig at træffe et valg. For at hjælpe dig med det er her et par noter:
Style
Google Closure Linter følger Google JavaScript Style Guide, kendt for at være klogt udført. Det er en god ide at bruge en velkendt stil til JavaScript eller et af seks andre sprog: når du deler din kode eller ansætter en ny udvikler, er chancerne for, at de allerede er bekendt med denne stil.
mange udviklere er bekendt med Douglas Crockford stil samt. Denne stil forklares detaljeret i JavaScript: de gode dele, en bog værd købes af alle, der arbejder med JavaScript.
hvad angår jsHint, kan jeg ikke rigtig finde ud af, hvilke konventioner der bruges, og hjemmesiden selv synes at undgå at tale om det emne. Måske gik jeg glip af noget.
støtte fra ide ‘ er
både jsLint og jsHint understøttes af PhpStorm. Dette er også tilfældet med Google lukning Linter.
miljø
Google lukning Linter er en af en række værktøjer. Hvis du allerede bruger Google lukning Compiler eller Google lukning Bibliotek, ville det være at foretrække at vælge lukning Linter over andre værktøjer.
strenghed
jsLint er kendt for at være streng. jsHint er mere permissiv, hvilket ikke altid er en god ting. For eksempel er en af grundene til at gaffel jsLint til jsHint forklaret i en artikel, der viser dårlig kode, som vil producere en fejl i jsLint, men ikke i jsHint:
/*global jQuery */// Example taken from jQuery 1.4.2 sourcejQuery.extend({ /* ... */ isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; } /* ... */});
koden er dårlig, fordi den ser ud til, at JavaScript har blokomfang, mens den ikke har det. se JavaScript: de gode dele, S. 102, Appendiks A: Forfærdelige Dele, Omfang. Med andre ord, når vi ser på koden uden at kende sproget, forventer vi, at name
ikke er synlig uden for løkken, mens den forbliver synlig.
hvad angår Google Closure Linter, tror jeg, at det er et sted i midten mellem jsLint og jsHint, men jeg har ikke nok information til at understøtte det.
konklusion
jeg ville undgå jsHint: det er for permissivt, hvilket betyder, at det ikke ville finde potentielle fejl, de andre linters ville opdage. Den stilguide, der bruges, er vanskelig at finde.
blandt jsLint og Google Closure Linter er valget ikke indlysende. Begge er skrevet af eksperter, begge følger strenge, godt beskrevet stil guide allerede efterfulgt af tusindvis af udviklere. Brug begge i nogen tid, og vælg derefter en, der er mere praktisk for dig.