0

次のようなコードがあります。

function dialog($link) {
    "use strict";

   function doDialogAjax() {
        $.ajax({
            cache: false,
            url: url,
            dataType: 'html'
        })
            .done(onDialogDone)
            .fail(onDialogFail);
   }

   function onDialogDone(data) {
        content = data;
   // ... 
   }
}

jslint は、onDialogDone がまだ定義されていないと文句を言います。コードの先頭でグローバルとして定義する必要がありますか? 私が尋ねている理由は、関数 onDialogDone がグローバルであるとは思わないからです。外側の関数内でまだ定義されていない関数です。

また、このように定義された関数は、最後の中括弧の後にセミコロンを付けるべきではないというのは正しいですか?

4

3 に答える 3

0

jslint多くのことについて不平を言うのは、それらが本質的に間違っているからではなく、作者がスタイルが悪いと信じているからです。

この場合、関数定義はスコープの先頭に引き上げられ、完全に有効なコードになります。

セミコロンの質問については、セミコロンを含めても問題ありません。ただし、ES5 仕様では必要ありません。

于 2012-09-26T10:50:24.730 に答える
0

グローバルとして定義する必要はありません。ajax 呼び出しの前に定義するだけです。実際には、次の 2 つの理由から問題ではありません。

  • とにかく関数定義が巻き上げられます
  • ajax 呼び出しは非同期であるため、コールバックが起動される前に以下のコードが実行されます。

それでも、jslint に準拠したコードを使用することは良いことですが、生死の問題ではありません ;)

于 2012-09-26T10:52:12.200 に答える
0

あなたのコードは完全に問題ありません。ただし、コードを分析するためにPratt Parser (Top Down Operator Precedence)JSLintを使用するため、初めて見たときに、まだ定義されていないために文句を言います。onDialogDone

文句を言わないようにするには、関数を一番上に移動します。このようにして、JSLint最初に定義が解析され、 が表示されると、シンボルが何を参照しているか.done(onDialogDone)わかりonDialogDoneます。

function onDialogDone(data) {
  // ...
}

function doDialogAjax() {
  // ...
}
于 2012-09-26T10:52:50.720 に答える