【问题标题】:jsLint still giving warning "X was used before it was defined." even when undef is setjsLint 仍然给出警告“在定义之前使用了 X。”即使设置了 undef
【发布时间】:2023-03-08 10:31:01
【问题描述】:

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

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

不过,我在一个问题上遇到了很多麻烦。我不断收到“在定义之前使用 X”的警告/错误。我可以在定义之前使用项目,所以我想关闭这个警告。我尝试在顶部的评论中设置 undef: true 并通过网络界面设置复选框,但截至今天,我仍然收到此错误。

此选项是否损坏或我做错了什么或误解了此选项的作用。

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

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

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

(function($){
    "use strict";

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

    function loadDashboardDataFromControls()
    {
    }

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

【问题讨论】:

    标签: javascript jslint


    【解决方案1】:

    根据JSLint source code(撰写本文时的最新提交),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

    【讨论】:

    • 是的,我可以通过重新排序代码来消除警告,但我更喜欢 $(function() { ... });位于容易找到的顶部。您对严格模式是正确的。我通过删除“use strict”进行了测试;从 js 并添加 jslint 选项 sloppy 来容忍它。在声明它们之前,我不再收到有关使用这些方法的消息,但它仍然将这两种方法都列为未定义和未使用,这似乎是矛盾的。我将你的答案标记为正确,因为你的答案非常好,但我想你也不能告诉我如何删除这个错误
    • 您可以将您的代码重写为var createDashboard; /* ... */ createDashboard = function () { /* ... */ };。这是一个干净的解决方案,有点类似于您首先定义原型的 C
    【解决方案2】:

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

    {
       "latedef": false
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-18
      • 2017-07-18
      • 2013-08-17
      • 2020-12-29
      • 2011-11-06
      • 2021-08-08
      • 2012-03-26
      相关资源
      最近更新 更多