jsLint仍在警告“;X是在定义之前使用的"即使设置了undef

jsLint still giving warning "X was used before it was defined." even when undef is set

本文关键字:quot 设置 undef 警告 jsLint 定义      更新时间:2023-09-26

最近,js文件中的一个拼写错误导致我的一个项目出现问题,但仅在某些浏览器上出现问题。我试图通过jsLint运行我们的大部分js文件,以查找任何其他未检测到的问题。我们的目标是让我们所有的js文件通过jsLint,要么纠正这个问题,要么如果我对这个问题满意,然后打开适当的jsLint选项。

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

不过,我在一个问题上遇到了很多麻烦。我一直收到"X在定义之前就被使用了"的警告/错误。我可以在定义项目之前使用它们,所以我想关闭这个警告。我试过在顶部的注释中设置undef:true,并通过web界面设置复选框,但到今天为止,我仍然收到这个错误。

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

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

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

/*jslint undef: true, white: true, browser: true */
/*global jQuery */
(function($){
    "use strict";
    $(function() {
        createDashboard();
        loadDashboardDataFromControls();
    });
    function loadDashboardDataFromControls()
    {
    }
    function createDashboard()
    {
    }
}(jQuery));

根据JSLint源代码(截至本文撰写之时的最新提交),undef严格模式下为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

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

{
   "latedef": false
}