@ldmitriy

Почему переменная объявленная в цикле сохраняется и за его пределами?

Хочу разобраться в такой элементарной вещи, но вроде же переменная не должна быть видима в следующем примере за пределами цикла
for (var i = 0; i < 10; i++)
 document.write(i);
alert(i);

Почему получаю 10 а не undefined?
  • Вопрос задан
  • 453 просмотра
Решения вопроса 1
staffID
@staffID
for - это языковая конструкция, а не функция, которой вы передаете аргументы

Вместо var используйте let

https://developer.mozilla.org/en-US/docs/Web/JavaS...
for( let i = 0; i < 10; i++ ) {
console.log( i );
}
console.log( i );

P.s.
У let блочная область видимости
У var контекстная область видимости
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
iiiBird
@iiiBird
Пока ты спишь - твой конкурент совершенствуется
а с каких пор цикл стал функцией?
ты обьявляешь i глобально - а потом также вызываешь ее глобально.
Ответ написан
@dev400
вы же объявили ее. Можете объявить ее вне цикла
var i;
for (i = 0; i < 10; i++)
 document.write(i);
alert(i);
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
Вот вам пример того, что происходит на самом деле:
function doSmth()
{
  var i; // будучи определенной через var, i объявляется за пределом блока for.
  for (i = 0; i < 10; i++)
     document.write(i);
alert(i); 
}


Чтоб такого не получалось, делайте иначе:
for (let i = 0; i < 10; i++)
 document.write(i);
alert(i); // будет ошибка undefined
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы