JavaScript для цикла с замыканием, вызывающим предупреждение JSLint
У меня есть сценарий JavaScript, который я пишу, который использует цикл для назначения onclick
события в серии кнопок. Чтобы исправить проблемы с объемом i
Я использую следующий пример в качестве основы для цикла for, основанного на этом ответе. Хотелось бы, чтобы я знал название этого способа создания цикла for, если он вообще есть.
for (var i = 0; i < 10; i++) (function(i){
//some code
})(i);
Когда я запускаю свой код через JSLint и JSHint, он выдает предупреждение: "Не выполняйте функции в цикле". Обращаясь к двум циклам for, которые построены, как указано выше. Вопросы, которые я видел об этом предупреждении, не используют цикл в формате, который я использую, поэтому я не знаю, как они применимы к этому.
Почему дается это предупреждение, и есть ли лучший способ, чем этот? Кроме того, есть ли имя для этого формата цикла (на эту последнюю часть можно ответить в комментариях)? Если это связано с другими вопросами, почему этот формат работает?
1 ответ
Это просто создание closure
а также immediately invoking function expression
, onclick
событие произойдет некоторое время в будущем, но к тому времени цикл завершит свое выполнение и значение i
будет обновлено до последнего значения i<10
Так что в этом случае с closure
а также IIFE
значение i
будет связан и останется в области.
Альтернативный способ заключается в использовании let
вместо var
for (let i = 0; i < 10; i++){
// rest of the code
}
область действия let всегда находится на уровне блока