Вот как работает var в JS, а также как работают циклы for на всех языках.
Когда вы объявляете переменную с помощью ключевого слова var, она поднимается в область действия функции или глобальна, если не внутри функция. Это позволяет получить доступ к var за пределами области действия for l oop. Попробуйте изменить var на let и посмотрите, что произойдет.
Во-вторых, вы не видите 5, напечатанного в for-l oop из-за вашего условия i < 5
. i++
вызывает 'i' в go от 4 до 5, что нарушает условия for-l oop, и 'i' не печатается.
Наконец, console.log (i) вне for -l oop должен просто вывести 5, потому что это значение i в этой точке, а не
console.log(i);
// prints 0 1 2 3 4 5
// should print 5