0

我理解为什么 JSLint 会在这里发出警告,但我不知道如何编写我的代码以便验证。

这是一个简化的示例。在下面的代码中,我有一个对象,我需要将两个事件侦听器附加到:一个用于“完成”,另一个用于“错误”。每个都指向自己的事件处理程序。当到达任一事件处理程序时,我想删除这两个事件处理程序。但是当我尝试从第一个事件处理程序中删除第二个事件处理程序的侦听器时,我总是会收到验证错误。

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.网络客户端说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 回答