JSLint(onevarフラグがオンになっている)は、以下のJavaScriptコードにフラグを立てています。
5行目の15文字目の問題:varステートメントが多すぎます。
私はこれらのエラーを修正してうれしいですが、知りたいのですが、パフォーマンスのためにそれを行っているのか、それは単なる悪い習慣であり、私のJavaScriptコードにバグを導入する可能性が高いためです。 onevarフラグの背後にある理由は何ですか?
JSLintのドキュメントで var keyword を確認しましたが、同じ関数内の複数のvarステートメントが悪い理由について具体的には触れていません。
ここに例を示します。 varステートメントを1つだけ持つことでコードにどのようなメリットがあるかを説明します。
function Test(arg) {
var x = arg + 1,
y = cache.GetItem('xyz');
if (y !== null) {
// This is what would cause the warning in JSLint
var request = ajaxPost(/* Parameters here */);
}
}
JavaScriptにはブロックスコープがありません。それを使用する他の言語(cなど)では、ifステートメントで変数を宣言した場合、その変数の外部では変数にアクセスできませんが、JavaScriptではアクセスできます。 JSLintの作者は、これは悪い習慣だと信じています。あなた(または他の読者)が混乱して、変数にアクセスできなくなったと思うかもしれませんが、実際にはアクセスできます。したがって、すべての変数を関数の先頭で宣言する必要があります。
公式の理由 ここにあります 、ダグラス・クロックフォードによる。
引用するには:
多くの言語では、ブロックはスコープを導入します。ブロックに導入された変数は、ブロックの外からは見えません。
JavaScriptでは、ブロックはスコープを導入しません。関数スコープのみあります。関数の任意の場所に導入された変数は、関数のすべての場所で表示されます。 JavaScriptのブロックは、使い慣れた構文が誤った約束をするため、経験豊富なプログラマーを混乱させ、エラーを引き起こします。
JSLintは、関数、if、switch、while、for、do、tryステートメントを備え、他の場所を持たないブロックを想定しています。
ブロックスコープの言語では、通常、変数を最初に使用する場所で宣言することをお勧めします。ただし、JavaScriptにはブロックスコープがないため、関数のすべての変数を関数の先頭で宣言する方が賢明です。関数ごとに単一のvarステートメントを使用することをお勧めします。これはvarsオプションで拒否できます。
次のように1つの場所で変数を宣言するだけです。
var request,x,y;
関数ごとに1つのvarステートメントのみが許可されている場合に「onevar」オプションがtrueに設定されている場合。
if (funct['(onevar)'] && option.onevar) {
warning("Too many var statements.");
}
推論はすでに説明されています。
このフォームを使用することをお勧めします。
var myVar1 = document.getElementById("myDiv1"),
myVar2 = document.getElementById("myDiv2");
またはこれ:
var myVar1, myVar2;
myVar1 = document.getElementById("myDiv1");
myVar2 = document.getElementById("myDiv2");
しかし、特に変数をドキュメント化したい場合は、これは見栄えがよくありません。
したがって、この警告を一時的に無効にすることができます:
/*jslint vars: true*/
/**
* @returns {HTMLDivElement}
*/
var myVar1 = document.getElementById("myDiv1");
/**
* @returns {HTMLDivElement}
*/
var myVar2 = document.getElementById("myDiv2");
/*jslint vars: false*/
警告:これが関数の上部で行われることを確認してください。
これは、変数が関数の最上部で宣言されているかどうかをjslintが確実に判断できなかったために行われたと思います。
ここでは推測ですが、 関数分解 の時間になるかもしれません。関数はoneを実行し、うまく実行する必要があります。
Varが多すぎると、あまりに多くのことをしようとしている関数を示唆しています。または、配列を使用する必要がある場合。