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:

javascriptlet 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:

javascriptlet 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:

javascriptlet res = 1;

if (true) {
  let res = 2;
  console.log(res); // sẽ hiển thị 2
}

console.log(res); // sẽ hiển thị 1
Задание 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 đề:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  let adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 2

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 đề:

javascriptlet age = 17;
let adult;

if (age >= 18) {
  adult = true;
} else {
  let adult = false;
}

console.log(adult);
Задание 3

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 đề:

javascriptlet 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);
Задание 4

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 đề:

javascriptlet 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);