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