0

JSLintがここで警告を発する理由は理解していますが、コードを検証するために他にどのようにコードを記述すればよいかわかりません。

これが煮詰めたサンプルです。以下のコードには、2つのイベントリスナーをアタッチする必要があるオブジェクトがあります。1つは「complete」用、もう1つは「error」用です。それぞれが独自のイベントハンドラーを指します。どちらかのイベントハンドラーに到達したら、両方のイベントハンドラーを削除したいと思います。ただし、最初のイベントハンドラーから2番目のイベントハンドラーのリスナーを削除しようとすると、常に検証エラーが発生します。

var myFunction = function(obj) {
    var doComplete = function() {
        // ...Do something here to handle successful execution, then remove listeners
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true); // INVALID!
    };
    var handleError = function() {
        // ...Do some error handling here and then remove event listener
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true);
    };

    obj.addEventListener('complete',doComplete,true);
    obj.addEventListener('error',handleError,true);
    obj.load();
};

これらの警告のいずれかが表示された場合、それは常に何か間違ったことをしていることを意味しますが、この場合、問題を回避する方法がわかりません。誰かがこれを行う正しい方法を知っていますか?

検証エラーは次 Lint at line 5 character 41: 'handleError' is not defined.のとおりです:(WebクライアントによるとImplied global: handleError 5

4

1 に答える 1

1

コードを少し並べ替える必要があります。

var myFunction = function(obj) {
    var doComplete, handleError;
    doComplete = function() {
        // ...Do something here to handle successful execution, then remove listeners
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true); // INVALID!
    };
    handleError = function() {
        // ...Do some error handling here and then remove event listener
        obj.removeEventListener('complete',doComplete,true);
        obj.removeEventListener('error',handleError,true);
    };

    obj.addEventListener('complete',doComplete,true);
    obj.addEventListener('error',handleError,true);
    obj.load();
};

JSLintは、使用される前に変数の宣言を確認することを期待しています。この変更は、効果がないように見えますが、そうします。

于 2010-07-25T20:44:34.610 に答える