Phạm vi biến trong if-else trong JavaScript
Để đơn giản, giả sử chúng ta có một điều kiện luôn đúng:
if (true) {
}
Hãy xem xét đoạn mã sau:
if (true) {
let res = '!';
}
console.log(res);
Như bạn thấy, giá trị '!'
phải được gán vào biến res. Tuy nhiên,
nếu chạy mã này, một lỗi sẽ xuất hiện trong console!
Vấn đề là, các biến được khai báo bên trong dấu ngoặc nhọn chỉ có thể nhìn thấy được bên trong những dấu ngoặc nhọn đó, và không thể nhìn thấy được từ bên ngoài. Theo ngôn ngữ khoa học, ở đây chúng ta đang nói về phạm vi của biến.
Có thể nói rằng phạm vi của các biến được khai báo bên trong dấu ngoặc nhọn chỉ là những dấu ngoặc nhọn đó. Tuy nhiên, nếu một biến được khai báo bên ngoài dấu ngoặc nhọn, thì nó có thể được nhìn thấy cả bên trong chúng và bên ngoài:
let res; // biến được khai báo bên ngoài
if (true) {
res = '!';
}
console.log(res); // sẽ xuất ra '!'
Trong ví dụ tiếp theo, giá trị 1 hoặc
giá trị 2 sẽ được gán cho biến res
tùy thuộc vào điều kiện:
let num = 5;
if (num >= 0) {
let res = 1;
} else {
let res = 2;
}
console.log(res);
Tuy nhiên, nếu chạy mã này, một lỗi sẽ xuất hiện trong console. Như bây giờ bạn đã hiểu, tất cả là do phạm vi của biến. Để giải quyết vấn đề, hãy khai báo biến bên ngoài điều kiện:
let test = true;
let res; // khai báo biến bên ngoài điều kiện
if (test) {
res = 1;
} else {
res = 2;
}
console.log(res); // sẽ xuất ra 1
Tác giả của mã dưới đây muốn thực hiện
kiểm tra tuổi có đạt 18
tuổi hay không. Tuy nhiên, mã không hoạt động. Hãy sửa
lỗi của tác giả mã. Đây là mã có vấn đề:
let age = 17;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);