Когда вы используете переменную, которая еще не объявлена, javascript объявит ее в текущей области действия функции или в глобальной области объекта (также известной как window в браузере или global в node.js), это то же самое поведение, когда вы используете ключевое слово var для объявления переменной.
Итак, ваш первый " for of " создаст переменная с именем item, которая доступна за пределами для scope.
Ключевое слово let имеет область видимости блока, поэтому оно доступно только внутри для l oop.
const arr = [1, 2, 3]
for (item of arr) {
console.log(item)
}
for (let item2 of arr) {
console.log(item)
}
console.log(item)
console.log(item2)
Второй файл console.log завершится с ошибкой ReferenceError : item2 не определен.