Нюансы вобласці бачнасці зменных у канструкцыях if-else у JavaScript
Вобласць бачнасці зменных мае некаторы
нюанс. Давайце разгледзім яго на прыкладзе.
Давайце аб'явім звонку нашай умовы зменную
res з адным значэннем, а ўнутры
ўмовы зменім гэта значэнне на іншае:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // выведе 2
Як вы бачыце, зменная res змянілася
ўнутры умовы. Усё, аднак, зменіцца,
калі ўнутры умовы таксама аб'явіць зменную
res праз let:
let res = 1;
if (true) {
let res = 2; // аб'явім зменную праз let
}
console.log(res); // выведе 1, а не 2!
Тут уся справа ў тым, што аб'яўленне зменнай
праз let ўнутры умовы стварыла лакальную
зменную res.
Гэта значыць ўнутры умовы існуе адна зменная
res, а звонку умовы - іншая.
Пераканацца ў гэтым можна, вывеўшы значэнне зменнай
у кансоль ўнутры умовы:
let res = 1;
if (true) {
let res = 2;
console.log(res); // выведе 2
}
console.log(res); // выведе 1
Аўтар прыведзенага ніжэй кода хацеў выканаць
праверку ўзросту на дасягненне 18
гадоў. Код, аднак, пры любым значэнні ўзросту
выводзіць у кансоль значэнне undefined.
Выпраўце памылку аўтара кода. Вось праблемны код:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Аўтар прыведзенага ніжэй кода хацеў выканаць
праверку ўзросту на дасягненне 18
гадоў. Пасля праверкі кода апынулася, што калі
ўзрост роўны або большы за 18 гадоў, то
ў зменную adult запісваецца true,
як і павінна быць, аднак, калі ўзрост меншы
18, то зменная adult мае
значэнне undefined. Выпраўце памылку
аўтара кода.
Вось праблемны код:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Аўтар прыведзенага ніжэй кода хацеў выканаць
праверку ўзросту. Код, аднак, пры любым
значэнні ўзросту выводзіць у кансоль значэнне
undefined. Выпраўце памылку аўтара кода.
Вось праблемны код:
let 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);
Аўтар прыведзенага ніжэй кода хацеў выканаць
праверку ўзросту. Код, аднак, пры значэнні
ўзросту большым за 18 гадоў выводзіць у
кансоль значэнне undefined. Выпраўце
памылку аўтара кода.
Вось праблемны код:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'ад 18 да 23';
} else {
res = 'больш за 23';
}
} else {
res = 'менш за 18';
}
console.log(res);