$
変数で使用しても何も問題はありません。すべての変数に対して意図的にそれを行うわけではありませんが、それでも有効な構文です。jQueryは$
、変数名として使用される例の1つです。また、そもそも「Chrome開発ツールでは常にこれがJavascriptエラーであるとは限らない」という理由もあります。これは、そもそもエラーがないためです。
次のようなコードを書くのが怖い場合:
var demo = function demo() {
var a = 123;
...
$a = 456; // A new variable is created in global scope.
}
次に、jsLint、jsHint、またはGoogle Closure Linterのようなスタイルチェッカーを使用する必要があります。それらのどれですか?選択するのはあなた次第です。これを支援するために、いくつかの注意事項があります。
スタイル
Google Closure Linterは、巧妙に行われていることが知られているGoogle JavaScript Style Guideに従っています。JavaScriptまたは他の6つの言語のいずれかでよく知られているスタイルを使用することをお勧めします。コードを共有したり、新しい開発者を採用したりするとき、おそらくこのスタイルに慣れている可能性があります。
多くの開発者は、ダグラスクロックフォードスタイルにも精通しています。このスタイルは、JavaScript:The Good Partsで詳しく説明されています。これは、JavaScriptを扱う人なら誰でも買う価値のある本です。
jsHintに関しては、どの規則が使用されているのかを実際に見つけることができず、Webサイト自体はその主題について話すことを避けているようです。たぶん私は何かを見逃した。
IDEによるサポート
jsLintとjsHint は両方ともPhpStormでサポートされています。これはまた、ケース Googleの閉鎖リンターの。
環境
Google Closure Linterは一連のツールの 1つです。既にGoogle Closure CompilerまたはGoogle Closure Libraryを使用している場合は、他のツールよりもClosure Linterを選択することをお勧めします。
厳格さ
jsLintは厳密であることが知られています。jsHintはより寛容であり、常に良いことではありません。たとえば、jsLintでjsLintをフォークする理由の1つは、jsLintではエラーを生成するが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;
}
/* ... */
});
JavaScriptにはブロックスコープがあるように見えますが、そうではないため、コードは悪いです。JavaScript:The Good Parts、p。を参照してください。102、付録A:ひどい部品、範囲。言い換えると、言語を知らずにコードを見るとname
、ループの外側では見えないが、見えるままであることが期待されます。
Google Closure Linterについては、jsLintとjsHintの中間にあると思いますが、それをサポートするのに十分な情報がありません。
結論
私はjsHintを避けます。それは許容範囲が広すぎるため、他のリンターが検出する可能性のあるバグを見つけられないことを意味します。使用されるスタイルガイドを見つけるのは困難です。
jsLintとGoogle Closure Linterでは、選択は明らかではありません。どちらも専門家によって書かれており、どちらもすでに数千人の開発者が従っている厳密でよく説明されたスタイルガイドに従っています。両方をしばらく使用してから、より実用的な方を選択してください。