Nuansa Skop Pembolehubah dalam Konstruksi if-else di JavaScript
Skop pembolehubah mempunyai satu
nuansa. Mari kita lihatnya melalui contoh.
Mari isytihar di luar kondisi kita pembolehubah
res dengan satu nilai, dan di dalam
kondisi tukar nilai tersebut kepada nilai lain:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // akan memaparkan 2
Seperti yang anda lihat, pembolehubah res bertukar
di dalam kondisi. Walau bagaimanapun, semuanya akan berubah,
jika di dalam kondisi juga kita isytihar pembolehubah
res melalui let:
let res = 1;
if (true) {
let res = 2; // isytihar pembolehubah melalui let
}
console.log(res); // akan memaparkan 1, bukan 2!
Di sini semuanya disebabkan oleh fakta bahawa pengisytiharan pembolehubah
melalui let di dalam kondisi mencipta pembolehubah
tempatan res.
Iaitu, di dalam kondisi wujud satu pembolehubah
res, dan di luar kondisi - satu lagi.
Anda boleh memastikannya dengan memaparkan nilai pembolehubah
di dalam konsol di dalam kondisi:
let res = 1;
if (true) {
let res = 2;
console.log(res); // akan memaparkan 2
}
console.log(res); // akan memaparkan 1
Pengarang kod di bawah ingin melaksanakan
periksa umur untuk mencapai 18
tahun. Walau bagaimanapun, kod untuk sebarang nilai umur
memaparkan dalam konsol nilai undefined.
Betulkan ralat pengarang kod. Ini kod bermasalah:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Pengarang kod di bawah ingin melaksanakan
periksa umur untuk mencapai 18
tahun. Selepas memeriksa kod, ternyata jika
umur sama dengan atau lebih daripada 18 tahun, maka
ke dalam pembolehubah adult direkodkan true,
seperti sepatutnya, walau bagaimanapun, jika umur kurang daripada
18, maka pembolehubah adult mempunyai
nilai undefined. Betulkan ralat
pengarang kod.
Ini kod bermasalah:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Pengarang kod di bawah ingin melaksanakan
periksa umur. Walau bagaimanapun, kod untuk sebarang
nilai umur memaparkan dalam konsol nilai
undefined. Betulkan ralat pengarang kod.
Ini kod bermasalah:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'dari 18 hingga 23';
} else {
let res = 'lebih daripada 23';
}
} else {
let res = 'kurang daripada 18';
}
console.log(res);
Pengarang kod di bawah ingin melaksanakan
periksa umur. Walau bagaimanapun, kod untuk nilai
umur lebih besar daripada 18 tahun memaparkan dalam
konsol nilai undefined. Betulkan
ralat pengarang kod.
Ini kod bermasalah:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'dari 18 hingga 23';
} else {
res = 'lebih daripada 23';
}
} else {
res = 'kurang daripada 18';
}
console.log(res);