変数に$
を使用することには何も問題はありません。 私はすべての変数で意図的にそれを行うわけではありませんが、それはまだ有効な構文です。 jQueryは、$
が変数名として使用される例の1つです。 それが、最初にエラーがないため、「Chrome dev toolsは常にこれがJavascriptエラーであるとは限りません」という理由でもあります。
次のようなコードを書くことを恐れている場合:
var demo = function demo() { var a = 123; ... $a = 456; // A new variable is created in global scope.}
次に、jsLint、jsHint、Google Closure Linterなどのスタイルチェッカーを使用する必要があります。 どっちだ? それは選択をするのはあなた次第です。 それを助けるために、ここにいくつかの注意事項があります:
Style
Google Closure Linterは、巧みに行われることが知られているGoogle JavaScriptスタイルガイドに従います。 コードを共有したり、新しい開発者を雇ったりするときには、すでにこのスタイルに精通している可能性があります。
多くの開発者はDouglas Crockfordスタイルにも精通しています。 このスタイルは、JavaScriptで詳細に説明されています:良い部分、JavaScriptで動作する人が購入する価値のある本。JsHintについては、どのような規則が使用されているのか実際にはわかりませんが、webサイト自体はその主題について話すことを避けているようです。 たぶん私は何かを逃した。
Ideによるサポート
jsLintとjsHintの両方がPhpStormでサポートされています。 これは、Googleの閉鎖Linterの場合でもあります。
環境
Google Closure Linterは、一連のツールの一つです。 すでにGoogle Closure CompilerまたはGoogle Closure Libraryを使用している場合は、他のツールの上にClosure Linterを選択することをお勧めします。
厳密性
jsLintは厳密であることが知られています。 jsHintはより寛容ですが、必ずしも良いことではありません。 たとえば、jslint for jshintをforkする理由の1つは、jslintではエラーを生成するがjsHintではエラーを生成しない悪いコードを示す記事で説明されています:
/*global jQuery */// Example taken from jQuery 1.4.2 sourcejQuery.extend({ /* ... */ isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; } /* ... */});
JavaScriptにはブロックスコープがあるように見えますが、そうではありません。JavaScript:The Good Parts,P.102,Appendix Aを参照してください: ひどい部品、スコープ。 言い換えれば、言語を知らずにコードを見ると、name
はループの外側には表示されず、表示されたままになると予想されます。Google Closure Linterについては、jsLintとjsHintの中間のどこかにあると思いますが、それをサポートするのに十分な情報がありません。
結論
私はjsHintを避けるでしょう:それはあまりにも寛容です、それは他のlintersが検出する潜在的なバグを見つけることができないことを意味します。 使用されているスタイルガイドは見つけるのが難しいです。
jsLintとGoogle Closure Linterの中で、選択は明らかではありません。 どちらも専門家によって書かれている、両方がすでに開発者の何千も続いて厳格な、よく説明されたスタイルガイドに従ってください。 いくつかの時間のために両方を使用し、あなたのために、より実用的であるものを選びます。