Сообщение 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 для использования индекса, оба решения, которые я бы предпочел не делать?

Спасибо заранее.

Обновление: я ценю все предложения, но этот код является просто примером, чтобы показать вам, что я имею в виду, и мне интересно увидеть общее решение, если оно есть. Спасибо.

Ответ 1

Try:

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

Ответ 2

Я думаю, что это должно быть новым в: 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, не являющегося функцией. Таким образом, "undefined! == win.undefined" пропускает строку, если мы находимся в браузере.

Ответ 3

вы можете сделать это:

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

... но это, вероятно, хуже, если вы спросите меня.

Ответ 4

Возможный способ избавиться от предупреждения способом, который достаточно самодокументирован, - заставить неиспользуемую переменную использовать, например:

// 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*/ может быть слишком широким.

Ответ 5

Как использовать void, чтобы сделать явным, что вы намеренно не используете переменную?

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

Это также полезно в абстрактных функциях, которые, как ожидается, будут перезаписаны, но где вы хотите показать подпись или в mocks, где вы игнорируете аргументы, но хотите сопоставить подделанную подпись функции.

Ответ 6

Я переименовал "i" как "неиспользуемый". Он все равно оставляет ошибку, но я вижу ее в списке и знаю, что я "проверил" эту ошибку и все в порядке с ней.

Ответ 7

В этом конкретном случае преобразования массива/объекта 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('');

Ответ 8

Если функция имеет несколько неиспользуемых параметров, вы можете использовать "игнорировать" следующим образом:

function (ignoreFoo, ignoreBar, baz) {
}

Он должен просто начинаться с зарезервированного слова "ignore" (игнорировать, ignoreFoo, ignoreBar,...).