não há nada de errado em usar $
em variáveis. Eu não faria isso de propósito em todas as variáveis, mas ainda é uma sintaxe válida. jQuery é um dos exemplos em que $
é usado como um nome de variável. É também por isso que “as ferramentas de desenvolvimento do Chrome nem sempre veem que isso é um erro Javascript”, porque não há erro em primeiro lugar.
se você tem medo de escrever código como:
var demo = function demo() { var a = 123; ... $a = 456; // A new variable is created in global scope.}
então você tem que usar um verificador de estilo, como jsLint, jsHint ou Google Closure Linter. Qual deles? Cabe a você fazer uma escolha. Para ajudá-lo com isso, aqui estão algumas notas:
Style
o Google Closure linter segue o Guia de estilo JavaScript do Google, conhecido por ser habilmente feito. Usar um estilo bem conhecido para JavaScript ou qualquer um dos seis outros idiomas é uma boa ideia: quando você compartilha seu código ou contrata um novo desenvolvedor, é provável que eles já estejam familiarizados com esse estilo.
muitos desenvolvedores também estão familiarizados com o estilo Douglas Crockford. Esse estilo é explicado em detalhes em JavaScript: as partes Boas, um livro que vale a pena ser comprado por qualquer pessoa que trabalhe com JavaScript.
quanto ao jsHint, não consigo realmente encontrar quais convenções são usadas e o próprio site parece evitar falar sobre esse assunto. Talvez tenha perdido alguma coisa.
suporte por IDEs
ambos jsLint e jsHint são suportados pelo PhpStorm. Este também é o caso do Linter de fechamento do Google.
Ambiente
o Google Closure Linter é uma de uma série de ferramentas. Se você já estiver usando o Google Closure Compiler ou a Biblioteca do Google Closure, seria preferível escolher o Closure Linter acima de outras ferramentas.
Rigor
sabe-se que o jsLint é rigoroso. jsHint é mais permissivo, o que nem sempre é uma coisa boa. Por exemplo, uma das razões para a bifurcação jsLint para jsHint é explicado em um artigo que mostra o código incorreto o que irá produzir um erro no jsLint, mas não em jsHint:
/*global jQuery */// Example taken from jQuery 1.4.2 sourcejQuery.extend({ /* ... */ isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; } /* ... */});
O código é ruim, porque parece que o JavaScript tem o escopo de bloco, enquanto ela não tem. Ver JavaScript: As Partes Boas, p. 102, Anexo A: Peças Horríveis, Escopo. Em outras palavras, olhando para o código sem conhecer o idioma, esperamos que name
não seja visível fora do loop, enquanto ele permanecerá visível.
quanto ao Linter de fechamento do Google, acredito que está em algum lugar no meio entre jsLint e jsHint, mas não tenho informações suficientes para suportar isso.
conclusão
eu evitaria jsHint: é muito permissivo, o que significa que não encontraria possíveis bugs que os outros linters detectariam. O Guia de estilo que é usado é difícil de encontrar.
entre JSLint e Google Closure Linter, a escolha não é óbvia. Ambos são escritos por especialistas, ambos seguem rigoroso, guia de estilo bem descrito já seguido por milhares de desenvolvedores. Use os dois por algum tempo e escolha um que seja mais prático para você.