web-dev-qa-db-ja.com

JSLint:定義済みエラーの前に関数を使用する

私はJSLintを使用してほとんどの外部Javascriptファイルを検証していますが、最も多くのエラーが発生するのは、定義される前に使用されている関数に起因するものです。

これは本当に私が心配すべき問題ですか?

Firefox、IE7、およびChrome do n't care。人気のあるinit()(よく使う)のような関数は、私にとって理にかなっているので、通常は上部に固定されます。 JSLintによれば、main())に似ているふりをするのが好きなので、ファイルの一番下にプッシュする必要があります。

71
Chris S

functionキーワードを使用して関数を宣言する場合、それらを宣言する前に使用できます。ただし、別のメソッド(関数式またはFunctionコンストラクターを使用するなど)で関数を宣言する場合、使用する前に関数を宣言する必要があります。詳細については、Mozilla Developer Networkの このページ を参照してください。

すべての関数をfunctionキーワードで宣言すると仮定すると、プログラミングスタイルの質問になると思います。個人的には、論理的に見えるように関数を構造化し、コードをできるだけ読みやすくすることを好みます。たとえば、あなたと同じように、init関数を先頭に配置します。これは、すべてが始まる場所だからです。

69
Steve Harrison

これは最高評価のGoogleヒットであり、他の人はjslintツールで最初は表示されない可能性があるため、このタイプのエラーを非表示にできる「誤った順序の定義を許容」というオプションがあります。

/*jslint latedef:false*/
84
kontur

Jshintを使用している場合、latedefnofuncに設定できます。これにより、後の関数定義のみが無視されます。

ドキュメント- http://www.jshint.com/docs/options/#latedef

使用例:

/* jshint latedef:nofunc */

noop();

function noop() {}

お役に立てれば。

33
Jan Molak

JslintのWebサイト( http://www.jslint.com/lint.html )から、他で宣言されていると想定される変数を設定できる/ * global * /ディレクティブについて読むことができます。

次に例を示します(これをファイルの先頭に置きます)。

/*global var1,var2,var3,var4,var5*/

:true:falseは、私の経験からは実際には必要ありませんが、サイトで読んだものから推奨されているようです。

最初のグローバルステートメントが/*と同じ行にあることを確認してください。そうでない場合は破損します。

11
stanton

すべてのファイルのjshintでこの警告を無効にするには、.jshintrcファイル:

{
   "latedef": false
}
2
Dmitri Zaitsev

あなたの.jshintrcファイル、設定:

  "latedef": "nofunc",
2
mooses

latedefオプションが削除されたことは非常に残念です。これは、上部にインターフェイスを持つ「クラス」を作成する場合に不可欠です。つまり、

function SomeClass() {
   var self = this;
   self.func = func;

   function func {
      ...
   }
}

このスタイルは非常に一般的ですが、定義される前にfuncが「使用」されるため、jsLintを渡しません。各「メンバー」機能にグローバルを使用することは、非常に苦痛です。

1
kofifus

一番上で問題の関数をいつでも宣言できます

例:var init;

....しかし、さらに真の定義に到達したら、「var」を削除する必要があります。

init = function(){};

0
jcsubmit