Почему переменная i = 6?
Потому что var создаётся не для текущей конструкции, а для всего. Чтобы такого не было, используйте let
разберем круглые скобки, второй и третий блок: вы говорили интерпретатору, чтобы он увеличил i пока его значение меньше или равно 5. Соответственно он остановился, когда i = 5, а третий блок увеличил i на единицу (5 + 1 = 6)