Wpis z mikrobloga

#javascript

do {
let a = +prompt('a?', '');
}
while (a>10);

Dlaczego jak podaję 11 to nie wykonuje się w kółko ta pętla? XDD....
  • 5
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

bo "a" jest zdefiniowane wewnątrz pętli, a nie poza nią, zrób coś takiego
let a = prompt('a?', '');
do {
a = prompt('a?', '');
} while (a>10);
  • Odpowiedz
@Jednorybek: tak, ponieważ mimo iż każda deklaracja (var/let/const) jest "hoistowana" (hoisting), o tyle var ma przypisany wtedy undefined, ale let/const będzie nadal niezainicjalizowany, zatem nie ma żadnej wartości. Idąc dalej - var wtedy należy do lexical scope poziom wyżej (zakładam, że tutaj już globalnego), a jakby to był let, to jego lexical scope ogranicza się do klamerek po "do", zatem while (a > 10) nie ma do niej dostępu
  • Odpowiedz