JSLint消息:未使用的变量

时间:2011-07-05 13:43:52

标签: javascript jquery jslint

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

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

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

除了容忍未使用的变量或重写$ .each以使用索引之外,还有其他解决方案,我不想做这两种解决方案吗?

提前致谢。

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

8 个答案:

答案 0 :(得分:79)

尝试:

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

答案 1 :(得分:24)

我认为这必须是新的:http://www.jslint.com/help.html

&#34; JSLint引入了一个新的保留字:ignore&#34;

所以上面简单地说:

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

i =&gt;忽略......太容易了。其余的代码可以保持不变,浏览器很高兴,JSLint很高兴

早些时候(错误的)回答:

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

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

浏览器崩溃&#34; undefined(d)&#34;由于未定义不是一个功能。所以&#34; undefined!== win.undefined&#34;如果我们在浏览器中,则跳过该行。

答案 2 :(得分:1)

你可以这样做:

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

......但如果你问我,那可能会更糟。

答案 3 :(得分:1)

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

// 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*/可能过于宽泛。

答案 4 :(得分:1)

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

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

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

答案 5 :(得分:1)

我将“i”重命名为“未使用”。它仍然明显地留下了错误,但我在列表中看到它并且知道我已经“检查”了该错误并且对它没问题。

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果函数有多个未使用的参数,您可以使用&#34; ignore&#34; ,如下所示:

function (ignoreFoo, ignoreBar, baz) {
}

它必须以保留字开头&#34;忽略&#34; (ignore,ignoreFoo,ignoreBar,...)。