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 всегда находится на уровне блока

Другие вопросы по тегам