Почему цикл for работает так?
Потому что последняя часть блока for выполняется в самом конце 4-ой итерации и только после этого срабатывает следующая проверка, которая завершает цикл.
Возможно, вам станет яснее, если оформить эту логику иначе:var i = 0;

while (true) {
  if (i >= 5) {
    // Здесь i равен 5
    break;
  }

  console.log(i);

  i++; // в тот момент, когда i становится равным 4-ём, цикл ещё работает и инкремент выполняется
}

console.log('after loop', i);
Заменил for на while - стало понятнее... var i = 0;
while (i < 5) {
  console.log(i);
  i++;
}
console.log('after loop', i);
Выход из цикла если 5 < 5