Нюансы вобласці бачнасці зменных у канструкцыях 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);