web-dev-qa-db-ja.com

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を書き換えたりする以外の解決策はありますか?

前もって感謝します。

更新:すべての提案に感謝しますが、このコードは単に私が意味することを示すための例であり、もしあれば、一般的な解決策を見ることに興味があります。ありがとう。

79
TheFitGeekGirl

試してください:

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
79
nickf

私はこれが新しいものであると思う: http://www.jslint.com/help.html

「JSLintで新しい予約語「ignore」が導入されました」

したがって、上記は単に次のようになります。

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

i =>無視...簡単すぎる。残りのコードは同じままにすることができ、ブラウザーは満足し、JSLintは満足します


以前の(間違った)答え:

JsLintとブラウザの両方をなだめるために、私は使用する必要がありました:

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

未定義が関数ではないため、「undefined(d)」でブラウザがクラッシュしました。したがって、ブラウザ内にいる場合、「undefined!== win.undefined」は行をスキップします。

24
PuZZleDucK

voidを使用して、変数を意図的に使用していないことを明示するのはどうですか?

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

これは、上書きされることが予想されるが、署名を表示する抽象関数や、引数を無視しているがモックされた関数の署名と一致させるモックでも役立ちます。

1
xn.

あなたはこれを行うことができます:

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

...しかし、あなたが私に尋ねると、それはおそらくもっと悪いことです。

1
nickf

「i」の名前を「未使用」に変更します。それでも明らかにエラーが残りますが、リストに表示され、そのエラーを「チェック」し、問題ないことを知っています。

1
DharmaTurtle

かなり自己文書化する方法で警告を取り除くための可能な方法は、次のように、未使用の変数を使用させることです。

// 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*/の使用は広すぎる可能性があります。

1
Magnus Hoff

配列/オブジェクトを変換するこの特定の場合 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('');
0
Greg Domjan

関数に複数の未使用パラメーターがある場合、次のように"ignore"を使用できます。

function (ignoreFoo, ignoreBar, baz) {
}

予約語 "ignore"で始まる必要があります(ignore、ignoreFoo、ignoreBar、...)。

0
Pilipe