Сообщение 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,...).