jsLint仍然发出警告“X在被定义之前被使用了”。即使设置了undef

时间:2012-08-17 21:28:26

标签: javascript jslint

最近js文件中的拼写错误导致我的某个项目出现问题,但仅限于某些浏览器。我试图通过jsLint运行我们的大多数js文件来查找任何其他未检测到的问题。我们的目标是通过纠正问题或者如果我对该问题没问题然后启用相应的jsLint选项来让所有js文件通过jsLint。

如果我能做到这一点,那么将来我想找到一种更频繁地运行jsLint的方法,但首先我需要传递所有文件。

虽然我遇到一个问题很麻烦。我一直收到“在定义之前使用了X”的警告/错误。我可以在定义之前使用项目,所以我想关掉这个警告。我已经尝试在顶部的注释中设置undef:true并通过Web界面设置复选框但截至今天,我仍然收到此错误。

这个选项是否被破坏,或者我做错了什么或误解了这个选项的作用。

根据docs,这应该适用于函数。

我目前正在使用jsLint web tool来扫描下面的代码。

/*jslint undef: true, white: true, browser: true */
/*global jQuery */

(function($){
    "use strict";

    $(function() {
        createDashboard();
        loadDashboardDataFromControls();
    });

    function loadDashboardDataFromControls()
    {
    }

    function createDashboard()
    {
    }
}(jQuery));

2 个答案:

答案 0 :(得分:2)

根据JSLint source code(截至撰写本文时的最新提交内容),undef严格模式下<{em> false

function use_strict() {
    if (next_token.string === 'use strict') {
        if (strict_mode) {
            warn('unnecessary_use');
        }
        edge();
        advance();
        semicolon();
        strict_mode = true;
        option.undef = false;
        return true;
    }
    return false;
}

正如我所知,您可以通过重新排列源代码轻松避免警告。只需将loadDashboardDataFromControls()loadDashboardDataFromControls()移到$([...])之上。

注意:在严格模式中,变量需要在使用前定义,显然 违反了该规则。所以,在我看来,我们看到的至少是一个文档错误:JSLint文档应该声明在严格模式下,undef标志设置为false

答案 1 :(得分:0)

要禁用此消息,您可以在项目的根目录中创建一个.jshintrc文件并添加代码:

{
   "latedef": false
}