75

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

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

Firefox、IE7、Chromeは気にしないようです。JSLintによると、人気のある関数init()(私がよく使用する関数)は通常、私には意味があるので(私はそれが類似しているふりをするのが好きです)、ファイルの下部にプッシュする必要があります。main()

4

8 に答える 8

86

これは最も評価の高いグーグルヒットであり、他の人がjslintツールで最初は表示しない可能性があるため、このタイプのエラーを非表示にできる「Toleratemisordereddefinitions」というオプションがあります。

/*jslint latedef:false*/
于 2012-03-01T07:35:32.293 に答える
69

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

すべての関数をキーワードで宣言すると仮定するfunctionと、プログラミング形式の質問になると思います。個人的には、論理的に見えるように関数を構造化し、コードをできるだけ読みやすくすることを好みます。たとえば、あなたのように、私はinit関数を一番上に置きます。それはすべてが始まるところだからです。

于 2009-04-30T10:47:55.510 に答える
33

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

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

使用例:

/* jshint latedef:nofunc */

noop();

function noop() {}

お役に立てれば。

于 2014-05-28T16:08:34.603 に答える
11

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

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

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

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

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

于 2012-07-18T15:09:38.727 に答える
2

jshintすべてのファイルでこの警告を無効にするには、次のファイルをファイルに配置し.jshintrcます。

{
   "latedef": false
}
于 2014-08-21T16:58:46.877 に答える
2

.jshintrcファイルに次のように設定します。

  "latedef": "nofunc",
于 2016-05-06T04:16:45.693 に答える
1

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

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

   function func {
      ...
   }
}

このスタイルは非常に一般的ですが、funcは定義される前に「使用」されるため、jsLintを渡しません。「メンバー」関数ごとにグローバルを使用する必要があるのは、非常に面倒です。

于 2015-01-21T03:45:20.280 に答える
0

問題のある関数はいつでも上部で宣言できます

例:var init;

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

init = function(){};

于 2013-05-04T14:35:50.993 に答える