Sắc thái về phạm vi biến trong cấu trúc if-else trong JavaScript
Phạm vi biến có một sắc thái nhất định.
Hãy cùng xem xét nó qua một ví dụ.
Hãy khai báo bên ngoài điều kiện của chúng ta một biến
res với một giá trị, và bên trong
điều kiện thay đổi giá trị đó thành giá trị khác:
let res = 1;
if (true) {
res = 2;
}
console.log(res); // sẽ hiển thị 2
Như bạn thấy, biến res đã thay đổi
bên trong điều kiện. Tuy nhiên, mọi thứ sẽ thay đổi,
nếu bên trong điều kiện cũng khai báo biến
res thông qua let:
let res = 1;
if (true) {
let res = 2; // khai báo biến thông qua let
}
console.log(res); // sẽ hiển thị 1, chứ không phải 2!
Ở đây vấn đề là ở chỗ, việc khai báo biến
thông qua let bên trong điều kiện đã tạo ra một biến cục bộ
res.
Tức là bên trong điều kiện tồn tại một biến
res, còn bên ngoài điều kiện - một biến khác.
Có thể kiểm chứng điều này bằng cách in giá trị của biến
ra console bên trong điều kiện:
let res = 1;
if (true) {
let res = 2;
console.log(res); // sẽ hiển thị 2
}
console.log(res); // sẽ hiển thị 1
Tác giả của đoạn mã dưới đây muốn thực hiện
kiểm tra tuổi đạt 18
tuổi. Tuy nhiên, mã này với bất kỳ giá trị tuổi nào
cũng hiển thị trong console giá trị
undefined.
Hãy sửa lỗi của tác giả mã. Đây là mã có vấn đề:
let age = 17;
let adult;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);
Tác giả của đoạn mã dưới đây muốn thực hiện
kiểm tra tuổi đạt 18
tuổi. Sau khi kiểm tra mã, hóa ra là nếu
tuổi bằng hoặc lớn hơn 18 tuổi, thì
vào biến adult sẽ được ghi là true,
đúng như mong đợi, tuy nhiên, nếu tuổi nhỏ hơn
18, thì biến adult có
giá trị undefined. Hãy sửa lỗi
của tác giả mã.
Đây là mã có vấn đề:
let age = 17;
let adult;
if (age >= 18) {
adult = true;
} else {
let adult = false;
}
console.log(adult);
Tác giả của đoạn mã dưới đây muốn thực hiện
kiểm tra tuổi. Tuy nhiên, mã này với bất kỳ
giá trị tuổi nào cũng hiển thị trong console giá trị
undefined. Hãy sửa lỗi của tác giả mã.
Đây là mã có vấn đề:
let age = 17;
let res;
if (age >= 18) {
if (age <= 23) {
let res = 'từ 18 đến 23';
} else {
let res = 'lớn hơn 23';
}
} else {
let res = 'nhỏ hơn 18';
}
console.log(res);
Tác giả của đoạn mã dưới đây muốn thực hiện
kiểm tra tuổi. Tuy nhiên, mã này với giá trị
tuổi lớn hơn 18 tuổi lại hiển thị trong
console giá trị undefined. Hãy sửa lỗi
của tác giả mã.
Đây là mã có vấn đề:
let age = 19;
let res;
if (age >= 18) {
let res;
if (age <= 23) {
res = 'từ 18 đến 23';
} else {
res = 'lớn hơn 23';
}
} else {
res = 'nhỏ hơn 18';
}
console.log(res);