Temporal Dead Zone (TDZ) trong JavaScript là một khái niệm liên quan đến biến được khai báo bằng letconst. TDZ đề cập đến khoảng thời gian mà một biến đã được khai báo nhưng chưa được khởi tạo, và trong khoảng thời gian này, việc truy cập biến đó sẽ gây ra lỗi.

1. Khái niệm về TDZ

  • Temporal Dead Zone xảy ra khi bạn cố gắng truy cập một biến trước khi nó được khởi tạo. Nếu một biến được khai báo bằng let hoặc const trong một block (ví dụ: trong một hàm hoặc khối điều kiện), nó sẽ không thể được sử dụng cho đến khi dòng mã khai báo biến đó được thực thi.

2. Ví dụ minh họa

function example() {
  console.log(x);  // ReferenceError: Cannot access 'x' before initialization
  let x = 10;      // 'x' đã được khai báo nhưng chưa khởi tạo
}

example();

Trong ví dụ trên, khi bạn cố gắng truy cập x trước khi nó được khởi tạo, một lỗi ReferenceError sẽ được ném ra.

3. Tại sao TDZ tồn tại?

TDZ tồn tại để ngăn chặn việc sử dụng biến trước khi chúng được khai báo, điều này có thể dẫn đến những lỗi khó phát hiện trong mã. Các biến được khai báo bằng var không có TDZ, vì vậy chúng sẽ được khởi tạo với giá trị undefined khi khai báo, dẫn đến một hành vi khác biệt.

4. Ví dụ so sánh với var

function exampleVar() {
  console.log(x);  // undefined
  var x = 10;      // 'x' được khởi tạo với giá trị undefined
}

exampleVar();

Trong trường hợp này, việc truy cập x trước khi nó được khởi tạo không gây ra lỗi mà chỉ trả về giá trị undefined.

5. Kết luận

TDZ là một phần quan trọng trong cách mà JavaScript xử lý các biến được khai báo bằng letconst. Điều này giúp phát hiện lỗi lập trình sớm hơn và làm cho mã trở nên dễ hiểu hơn, vì bạn luôn phải khởi tạo biến trước khi sử dụng chúng.