TDZ là khoảng từ đầu block tới dòng khai báo của một biến let/const.
Trong khoảng đó biến đã tồn tại nhưng chưa khởi tạo, truy cập sẽ ném ReferenceError.
javascript
{
// ── TDZ của x bắt đầu ở đây ──
console.log(typeof y) // 'undefined' — y chưa khai báo ở đâu cả
console.log(typeof x) // ReferenceError! — x ĐANG trong TDZ
let x = 5
// ── TDZ kết thúc ──
console.log(x) // 5
}Dòng typeof x là điểm hay được hỏi: typeof vốn an toàn với biến chưa khai báo, nhưng không an toàn với biến trong TDZ.
So với var:
javascript
console.log(a) // undefined — var được khởi tạo sẵn
console.log(b) // ReferenceError — let trong TDZ
var a = 1
let b = 2TDZ cũng áp cho tham số mặc định:
javascript
function f(x = y, y = 2) { }
f() // ReferenceError — y còn trong TDZ khi tính xChốt khi trả lời: nói rõ biến vẫn được hoist, chỉ là chưa khởi tạo.
Nhiều người trả lời "let/const không hoist" — đó là câu trả lời sai mà interviewer đang chờ để hỏi tiếp.