3

与以前相同的代码,但不同的问题:

我有这样的代码:

/*jslint browser: true*/
/*jslint vars: true */
/*global $, jQuery, adminModalDone, ajaxOnFailure, createModal, defineModal*/
/*global doAddSubmit, doResetTabs, mvcOnFailure*/
/*global onDialogDone, onDialogFail, submitHandler*/

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

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

    function onDialogDone(data) {
        content = data;
        if (content.match(/^[eE]rror/)) {
            mvcOnFailure(content);
        } else {
            defineModal();
            createModal();
            doAddSubmit();
            doResetTabs();
            adminModalDone();
        }
    }
}

现在jslint抱怨我在OnDialogDone中的大部分功能都没有使用。因为我将 onDialogDone 定义为全局变量,它是否由 jslint 评估?

4

1 回答 1

1

onDialogDone()这两种解决方法中的任何一种都应该删除警告,而不是声明为全局的:

  1. 交换onDialogDone()and的顺序doDialogAjax()(如@James Allardice 建议的那样)。JSLint 期望对函数(或 var 名称)的所有引用在文件中出现的位置低于声明它的位置。
  2. 如果有循环引用使得无法按该顺序放置事物(或者从组织上讲,您不想以这种方式重新排序事物),您可以使用这个技巧:

    var onDialogDone;
    function doDialogAjax() {
        // call to onDialogDone() is in here - ok since below the var declaration
    }
    onDialogDone = function (data) {
        // ...
    }
    

还有第三个选项,通过该undef: true选项完全禁用此警告,但我不推荐它。这个特殊的警告是捕捉代码中的拼写错误和其他保证崩溃的最佳警告之一。(此外,看起来JSLint 刚刚删除了 'undef' 选项)。

于 2013-05-13T06:58:28.140 回答