JSLint 消息: 未使用的变量

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

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

(i,item)是参数的必要顺序,我只使用了“ item”。

除了容忍未使用的变量或重写 $之外,还有其他解决方案吗。每个使用索引,这两个解决方案我宁愿不做?

先谢谢你。

更新: 我很感谢所有的建议,但这段代码只是一个例子,告诉你我的意思,我有兴趣看到一个通用的解决方案,如果有任何。谢谢。

35269 次浏览

你可以这样做:

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

但要我说,这可能更糟。

试试:

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

以一种相当自我记录的方式消除警告的一种可能的方法是使用未使用的变量,如下所示:

// 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”重命名为“未使用”。显然,它仍然留下了错误,但是我在列表中看到了这个错误,并且知道我已经“检查”了这个错误,对此没有问题。

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

“ JSLint 引入了一个新的保留字: 忽略”

因此,以上内容就变成了:

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

忽略... 太容易了。其余的代码可以保持不变,浏览器和 JSLint 都很满意


早期(错误)答案:

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

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

由于未定义的不是一个函数,浏览器在“未定义(d)”上崩溃。所以“未定义!”!如果我们在浏览器中,= = win.unDefinition”将跳过这一行。

在这种转换数组/对象 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('');

如果函数有多个未使用的参数,您可以像下面这样使用 “忽略”:

function (ignoreFoo, ignoreBar, baz) {
}

它必须简单地以保留字“忽略”开头(忽略、忽略 Foo、忽略吧,...)。