Сообщение JSLint: неиспользуемые переменные - PullRequest
78 голосов
/ 05 июля 2011

что я могу сделать, если JSLint жалуется на то, что «i» является неиспользуемой переменной в таком сценарии:

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

(i, item) - требуемый порядок параметров, и я использую только »вещь".

Есть ли какое-либо иное решение, кроме как допустить неиспользуемые переменные или переписать $ .each для использования индекса, оба решения, которые я бы предпочел не делать?

Заранее спасибо.

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

Ответы [ 8 ]

79 голосов
/ 05 июля 2011

Попробуйте:

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
24 голосов
/ 08 июля 2015

Я думаю, что это должно быть новым в: http://www.jslint.com/help.html

"JSLint вводит новое зарезервированное слово: ignore"

Таким образом, вышеприведенное просто становится:

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

я => игнорировать ... слишком просто.Остальная часть кода может остаться прежней, браузеры счастливы, а JSLint счастлив


Предыдущий (неправильный) ответ:

Чтобы успокоить JsLint и браузеры, которые мне нужно было использовать:

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

В браузере произошел сбой "undefined (d)" из-за того, что undefined не является функцией.Так что "undefined! == win.undefined" пропускает строку, если мы в браузере.

1 голос
/ 14 ноября 2013

Я переименовываю «i» в «unused».Это по-прежнему оставляет ошибку, но я вижу ее в списке и знаю, что «проверил» эту ошибку и все в порядке.

1 голос
/ 14 сентября 2013

Как насчет использования 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 голос
/ 05 июля 2011

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

// 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 голос
/ 05 июля 2011

Вы могли бы сделать это:

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

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

0 голосов
/ 26 апреля 2017

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

function (ignoreFoo, ignoreBar, baz) {
}

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

0 голосов
/ 30 января 2017

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