det är inget fel i att använda $
i variabler. Jag skulle inte göra det med avsikt på varje variabel, men det är fortfarande en giltig syntax. jQuery är ett av exemplen där $
används som ett variabelnamn. Det är också därför ”Chrome dev tools inte alltid ser detta är ett Javascript-fel”, eftersom det inte finns något fel i första hand.
om du är rädd för att skriva kod som:
var demo = function demo() { var a = 123; ... $a = 456; // A new variable is created in global scope.}
då måste du använda en stilkontroll, som jsLint, jsHint eller Google Closure Linter. Vilken av dem? Det är upp till dig att göra ett val. För att hjälpa dig med det, här är några anteckningar:
Style
Google Closure Linter följer Google JavaScript Style Guide, känd för att vara smart gjort. Att använda en välkänd stil för JavaScript eller något av sex andra språk är bra: när du delar din kod eller anställer en ny utvecklare är chansen att de redan är bekanta med den här stilen.
många utvecklare är bekanta med Douglas Crockford stil samt. Denna stil förklaras i detalj i JavaScript: the Good Parts, en bok värd att köpas av alla som arbetar med JavaScript.
när det gäller jsHint kan jag inte riktigt hitta vilka konventioner som används, och själva webbplatsen verkar undvika att prata om det ämnet. Jag kanske missade något.
stöd av IDEs
både jsLint och jsHint stöds av PhpStorm. Detta är också fallet med Google Closure Linter.
miljö
Google Closure Linter är ett av en serie verktyg. Om du redan använder Google Closure Compiler eller Google Closure Library, skulle det vara att föredra att välja Closure Linter framför andra verktyg.
stränghet
jsLint är känt för att vara strikt. jsHint är mer tillåtet, vilket inte alltid är bra. Till exempel förklaras en av anledningarna till att gaffla jsLint för jsHint i en artikel som visar dålig kod som kommer att ge ett fel i jsLint, men inte 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 är dålig, eftersom det ser ut som att JavaScript har blockomfång, medan det inte har det. se JavaScript: The Good Parts, S. 102, Bilaga A: Hemska Delar, Omfattning. Med andra ord, när vi tittar på koden utan att känna till språket, förväntar vi oss att name
inte är synlig utanför slingan, medan den kommer att förbli synlig.
när det gäller Google Closure Linter tror jag att det är någonstans i mitten mellan jsLint och jsHint, men jag har inte tillräckligt med information för att stödja det.
slutsats
jag skulle undvika jsHint: det är för tillåtet, vilket innebär att det inte skulle hitta potentiella buggar som de andra linterna skulle upptäcka. Den stilguide som används är svår att hitta.
bland jsLint och Google Closure Linter är valet inte uppenbart. Båda är skrivna av experter, båda följer strikt, väl beskrivna stilguide redan följt av tusentals utvecklare. Använd båda under en tid och välj sedan en som är mer praktisk för dig.