JSLint消息:未使用的变量

JSLint message: Unused variables

本文关键字:变量 未使用 消息 JSLint      更新时间:2023-09-26

如果JSLint抱怨" I "在这种情况下是一个未使用的变量,我该怎么办:

var items = "<option selected></option>";
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

(i, item)是参数的必需顺序,我只使用"item"。

除了允许使用未使用的变量或重写$。每个都使用索引,两个解决方案,我不希望这样做?

提前感谢。

更新:我感谢所有的建议,但这段代码只是一个例子,向你展示我的意思,我有兴趣看到一个一般的解决方案,如果有的话。谢谢。

尝试:

var items = "<option selected></option>";
/*jslint unparam: true*/
$.each(data, function (i, item) {
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});
/*jslint unparam: false*/  // so that you still get warnings from other functions

我想这一定是新的:http://www.jslint.com/help.html

"JSLint引入了一个新的保留字:ignore"

所以上面的代码就变成了:

$.each(data, function (ignore, item) {

i => ignore…太容易了。其余的代码可以保持不变,浏览器和JSLint都很高兴


之前的(错误)答案:

为了安抚JsLint和浏览器,我需要使用:

function (d, i) {
        if (undefined !== win.undefined) {
            undefined(d);
        }
        return (i);
}

浏览器在"undefined(d)"时崩溃,因为undefined不是一个函数。所以"未定义!=="获胜。

你可以这样做:

var items = "<option selected></option>";
$.each(data, function () {
    var item = arguments[1];
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

…但如果你问我的话,我觉得这可能更糟。

以一种相当自文档化的方式摆脱警告的一种可能方法是导致使用未使用的变量,如下所示:

// Utility function in project scope:
function unusedVariables(/* Put all your deliberately unused variables here */) {
    // pass
}
// And then, later:
var items = "<option selected></option>";
$.each(data, function (i, item) {
    unusedVariables(i); //< This is the new and magical line
    items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

当然,现在您可能会遇到这样的情况:您将变量标记为未使用,但仍然在某处使用它。而且,这个方法可能过于冗长,具体取决于上下文。

这种方法的优点是它很精确。使用/*jslint unparam*/可能过于宽泛。

如何使用void明确表示您有意不使用该变量?

$.each(data, function (i, item, any, other, unused, vars) {
  void(i, any, other, unused, vars);
  items += "<option value='" + item.Value + "'>" + item.Text + "</option>";
});

这在期望被覆盖的抽象函数中也很有用,但是您想要显示签名,或者在模拟中,您忽略了参数,但是想要匹配模拟函数的签名。

我将" I "重命名为"unused"。显然,它仍然会留下错误,但我在列表中看到它,并且知道我已经"检查"了该错误,并且没有问题。

在这种特殊情况下,转换数组/对象http://api.jquery.com/jquery.map/(或http://api.jquery.com/map/?)是一个选项。

var items = "<option selected></option>" + $.map(data, function (item) { 
    return "<option value='" + item.Value + "'>" + item.Text + "</option>";
}).get().join('');

如果函数有多个未使用的参数,可以像这样使用"ignore"

function (ignoreFoo, ignoreBar, baz) {
}

必须以保留字"ignore" (ignore, ignoreFoo, ignoreBar,…)开头