Проверяет понимание области видимости переменных в блочных конструкциях и того, как for...of создаёт новую привязку на каждой итерации.
Цикл for...of отличается от классического for тем, что на каждой итерации создаётся новая лексическая привязка переменной. Это означает, что const здесь не вызывает ошибку переприсваивания, как можно было бы ожидать, а корректно фиксирует значение текущего элемента коллекции.
Спецификация ECMAScript описывает for...of так, что переменная объявляется заново на каждом шаге итерации. Поэтому const получает новую привязку с новым значением, а не переприсваивается в старой.
const items = [10, 20, 30];
for (const item of items) {
console.log(item); // 10, 20, 30 — всё работает
}
// А вот так будет ошибка:
for (const item of items) {
item = item * 2; // TypeError: Assignment to constant variable
}
Если внутри тела цикла вы планируете переприсвоить переменную, например накапливать значение, тогда используйте let:
let total = 0;
for (let value of [1, 2, 3]) {
value = value * 10; // переприсваивание допустимо
total += value;
}
Итог: по умолчанию в for...of используйте const — это безопаснее и выразительнее, а let оставляйте только для случаев, когда переменную действительно нужно менять внутри итерации.