В for есть три блока если можно так сказать 1 объявление переменной, 2 само условие выхода, 3 как изменять переменную с каждым циклом. Во втором блоке проверяется сответствует значение переменной условий условию или нет. Так вот чтобы проверять условие, то во первых переменная должна существовать что бы ее проверять, а во вторых если бы и можно было создавать переменную в момент проверки, то она пересоздавалась бы при каждой итерации цикла. А собственно в while, есть только вот этот самый блок проверки, а создаётся и изменяется переменная в не while