er is niets mis met het gebruik van $
in variabelen. Ik zou het niet expres doen op elke variabele, maar het is nog steeds een geldige syntaxis. jQuery is een van de voorbeelden waar $
wordt gebruikt als een variabele naam. Dat is ook de reden waarom “Chrome dev tools niet altijd zien dit is een Javascript fout”, omdat er geen fout in de eerste plaats.
als u bang bent om code te schrijven zoals:
var demo = function demo() { var a = 123; ... $a = 456; // A new variable is created in global scope.}
dan moet u een stijlcontrole gebruiken, zoals jsLint, jsHint of Google Closure Linter. Welke van die? Het is aan jou om een keuze te maken. Om u daarbij te helpen, hier zijn een paar opmerkingen:
Style
Google Closure Linter volgt Google JavaScript Style Guide, bekend om slim gedaan. Het gebruik van een bekende stijl voor JavaScript of een van de zes andere talen is een goed idee: wanneer u uw code te delen of het huren van een nieuwe ontwikkelaar, is de kans groot dat ze al bekend zijn met deze stijl.
veel ontwikkelaars zijn ook bekend met de Douglas Crockford-stijl. Deze stijl wordt in detail uitgelegd in JavaScript: de goede delen, een boek de moeite waard worden gekocht door iedereen die met JavaScript werkt.
wat jsHint betreft, ik kan niet echt vinden welke conventies worden gebruikt, en de website zelf lijkt te vermijden om over dat onderwerp te praten. Misschien heb ik iets gemist.
ondersteuning door IDEs
zowel jsLint als jsHint worden ondersteund door PhpStorm. Dit is ook het geval met Google Closure Linter.
omgeving
Google Closure Linter is een van een reeks tools. Als u al Google Closure Compiler of Google Closure Library gebruikt, zou het beter zijn om Closure Linter boven andere tools te kiezen.
strengheid
jsLint is bekend als streng. jsHint is meer tolerant, wat niet altijd een goede zaak is. Bijvoorbeeld, een van de redenen om JSLint fork voor jsHint wordt uitgelegd in een artikel dat slechte code toont die een fout in jsLint zal produceren, maar niet in jsHint:
/*global jQuery */// Example taken from jQuery 1.4.2 sourcejQuery.extend({ /* ... */ isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; } /* ... */});
de code is slecht, omdat het lijkt alsof JavaScript Block scope heeft, terwijl het niet. zie JavaScript: the Good Parts, p. 102, Appendix A: Vreselijke Delen, Scope. Met andere woorden, als we naar de code kijken zonder de taal te kennen, verwachten we dat name
niet zichtbaar is buiten de lus, terwijl het zichtbaar blijft.
wat betreft Google Closure Linter, ik geloof dat het ergens in het midden tussen jsLint en jsHint, maar ik heb niet genoeg informatie om dat te ondersteunen.
conclusie
ik zou jsHint vermijden: het is te tolerant, wat betekent dat het geen potentiële bugs zou vinden die de andere linters zouden detecteren. De gebruikte stijlgids is moeilijk te vinden.
bij jsLint en Google Closure Linter ligt de keuze niet voor de hand. Beide zijn geschreven door experts, beide volgen strikte, goed beschreven style guide al gevolgd door duizenden ontwikkelaars. Gebruik beide voor enige tijd, kies dan een die praktischer is voor u.