Нијансе опсега видљивости променљивих у конструкцијама if-else у JavaScript-у

Опсег видљивости променљивих има одређене нијансе. Хајде да их размотримо на примеру. Хајде да декларишемо ван нашег услова променљиву res са једном вредношћу, а унутар услова променимо ту вредност на другу:

javascriptlet res = 1;

if (true) {
  res = 2;
}

console.log(res); // исписаће 2

Као што видите, променљива res се променила унутар услова. Међутим, све се мења ако унутар услова такође декларишемо променљиву res преко let:

javascriptlet res = 1;

if (true) {
  let res = 2; // декларишимо променљиву преко let
}

console.log(res); // исписаће 1, а не 2!

Овде је ствар у томе што декларација променљиве преко let унутар услова креира локалну променљиву res.

То јест, унутар услова постоји једна променљива res, а ван услова - друга. То се може проверити исписујући вредност променљиве у конзолу унутар услова:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // исписаће 2
}

console.log(res); // исписаће 1
Задание 1

Аутор кода испод је желео да изврши проверу да ли је старост достигла 18 година. Међутим, код при било којој вредности старости исписује у конзолу вредност undefined. Исправите грешку аутора кода. Ево проблематичног кода:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 2

Аутор кода испод је желео да изврши проверу да ли је старост достигла 18 година. Након провере кода се показало да ако старост једнака или већа од 18 година, онда се у променљиву adult уписује true, као што и треба да буде, међутим, ако је старост мања од 18, онда променљива adult има вредност undefined. Исправите грешку аутора кода.

Ево проблематичног кода:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 3

Аутор кода испод је желео да изврши проверу старости. Међутим, код при било којој вредности старости исписује у конзолу вредност undefined. Исправите грешку аутора кода.

Ево проблематичног кода:

javascriptlet age = 17;
let res;

if (age >= 18) {
  if (age <= 23) {
    let res = 'од 18 до 23';
  } else {
    let res = 'веће од 23';
  }
} else {
  let res = 'мање од 18';
}

console.log(res);
Задание 4

Аутор кода испод је желео да изврши проверу старости. Међутим, код при вредности старости већој од 18 година исписује у конзолу вредност undefined. Исправите грешку аутора кода.

Ево проблематичног кода:

javascriptlet age = 19;
let res;

if (age >= 18) {
  let res;
  
  if (age <= 23) {
    res = 'од 18 до 23';
  } else {
    res = 'веће од 23';
  }
} else {
  res = 'мање од 18';
}

console.log(res);