1. ホーム
  2. javascript

JSLintのエラーです。すべての'var'宣言を関数の先頭に移動させる

2023-10-25 08:12:05

質問

JSLintのサイトが更新され、JSスクリプトをチェックすることができなくなりました。私にとっては、この警告は重要ではなく、これを修正するために何千もの行を通過したくないので、より重大な問題を見つけたいです。

誰かこのエラーをオフにする方法、またはレガシーJSLintを使用する方法を知っていますか?

UPDATE

function doSomethingWithNodes(nodes){
  this.doSomething();

  for (var i = 0; i < nodes.length; ++i){
    this.doSomethingElse(nodes[i]);
  }

  doSomething(); // want to find this problem
}

jslint.comの出力です。

Error:
Problem at line 4 character 8: Move all 'var' declarations to the top of the function.

for (var i = 0; i < nodes.length; ++i){

Problem at line 4 character 8: Stopping, unable to continue. (44% scanned).

問題です。

関数の上に変数を持つことは新しい要件です。このエラーでスクリプトのスキャンを停止してしまうため、コードのテストにJSLINTを使用することができません。

私は多くのコードを持っており、この警告をクリティカルなエラーとして脅かしたくありません。

2011年8月22日更新:発見 http://jshint.com よりもはるかに良さそうです。 http://jslint.com/

どのように解決するのですか?

2017年6月に更新しました。 対応状況(Internet Explorer 10 以下で JavaScript を実行していない場合など)に応じて レット の代わりに ヴァル .

例えば for(let i=0; ...; i++)


を入れるわけがない。 var i; から for(var i=0; ...; i++) を関数の先頭で使用します。 特に JavaScriptの仕様 には許容される構文として for セクションで許容される構文としています (12.6)。 また、構文として ブレンダン・アイク は彼の例で使っています。

宣言を先頭に移動させるというアイデアは、ボンネットの下で起こっていることをより正確に反映させるためですが、そうすることは反映するだけで、影響を与えるわけではありません。

私にとっては、これは馬鹿げた期待で for の繰り返しに対して馬鹿げた期待です。 JSLintがそれを検出すると処理を停止してしまうので、なおさらです。

関数の先頭で宣言された変数を持つことがより読みやすいかどうかは議論の余地があります。 個人的には、イテレータ変数は使うときに宣言するのが望ましいと思います。 その変数がすでに内部で作成されていても気にせず、ここで初期化しているので安全です。

私は、イテレータ変数が使用されるときに宣言することで、誤ってグローバル化されないことを保証します(ループを別の関数に移動させると、イテレータ変数も一緒に移動します)。 これは、関数の先頭で変数宣言を維持しなければならないよりもはるかに保守しやすいものです。

今のところ、私は http://www.javascriptlint.com/online_lint.php を使うことにしました。