Non c'è niente di sbagliato nell'usare $
nelle variabili. Non lo farei apposta su ogni variabile, ma è comunque una sintassi valida. jQuery è uno degli esempi in cui $
viene utilizzato come nome di variabile. Questo è anche il motivo per cui "gli strumenti di sviluppo di Chrome non sempre vedono che si tratta di un errore Javascript" , perché non vi sono errori in primo luogo.
Se hai paura di scrivere codice come:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
allora devi usare un controllo di stile, come jsLint , jsHint o Google Closure Linter . Quale di questi? Sta a te scegliere. Per aiutarti, ecco alcune note:
Stile
Google Closure Linter segue la Guida di stile JavaScript di Google , nota per essere eseguita con intelligenza. Utilizzare uno stile ben noto per JavaScript o una qualsiasi delle altre sei lingue è una buona idea: quando condividi il tuo codice o assumere un nuovo sviluppatore, è probabile che abbiano già familiarità con questo stile.
Molti sviluppatori hanno familiarità con lo stile di Douglas Crockford. Questo stile è spiegato dettagliatamente in JavaScript: The Good Parts , un libro che può essere acquistato da chiunque lavori con JavaScript .
Per quanto riguarda jsHint, non riesco davvero a trovare le convenzioni utilizzate, e il sito web sembra evitarsi di parlare di quell'argomento. Forse mi sono perso qualcosa.
Supporto per IDE
Sia jsLint che jsHint sono supportati da PhpStorm. Questo è anche il caso di Google Closure Linter.
Ambiente
Google Closure Linter è una serie di strumenti . Se stai già utilizzando Google Closure Compiler o Google Closure Library , sarebbe preferibile scegliere Closure Linter sopra altri strumenti.
Rigore
jsLint è noto per essere severo. jsHint è più permissivo, che non è sempre una buona cosa. Ad esempio, uno dei motivi per fork di jsLint per jsHint è spiegato in un articolo che mostra codice errato che produce un errore in jsLint, ma non in 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;
}
/* ... */
});
Il codice è cattivo, perché sembra che JavaScript abbia un ambito di blocco, mentre non lo è. Vedi JavaScript: Le buone parti, p. 102, Appendice A: Awful Parts, Scope. In altre parole, guardando il codice senza conoscere la lingua, ci aspettiamo che name
non sia visibile al di fuori del ciclo, mentre rimarrà visibile.
Per quanto riguarda Google Closure Linter, credo che sia da qualche parte nel mezzo tra jsLint e jsHint, ma non ho abbastanza informazioni per supportarlo.
Conclusione
Eviterei jsHint: è troppo permissivo, il che significa che non troverà potenziali bug che gli altri linters potrebbero rilevare. La guida di stile utilizzata è difficile da trovare.
Tra jsLint e Google Closure Linter, la scelta non è ovvia. Entrambi sono scritti da esperti, entrambi seguono una guida di stile rigorosa e ben descritta, seguita da migliaia di sviluppatori. Usa entrambi per un po 'di tempo, quindi scegli quello che è più pratico per te.