Нюанси на областта на видимост на променливите в конструкции 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);