#1. Execution Context (Ngữ cảnh thực thi)
Mỗi khi một hàm được gọi, JS tạo ra một “Execution Context”. Nó gồm 2 giai đoạn:
- Creation Phase: Setup bộ nhớ (biến, hàm được đưa vào bộ nhớ).
- Execution Phase: Thực thi từng dòng code.
#2. Hoisting (Sự nâng lên)
- Hàm (
function): Được hoisting toàn bộ code, nên bạn có thể gọi hàm trước khi định nghĩa. var: Được hoisting và gán giá trịundefined.let/const: Được hoisting nhưng nằm trong Temporal Dead Zone (TDZ). Truy cập trước khi khai báo sẽ gây lỗiReferenceError.
#3. Tại sao cần quan tâm?
Việc hiểu Hoisting giúp bạn tránh các bug “undefined” kinh điển và viết code có thứ tự, dễ đọc hơn. Luôn khai báo biến trước khi dùng (với let/const) là tiêu chuẩn của một Senior.
#4. Quizz Senior
Q: Tại sao let/const lại có TDZ?
A: Để ngăn chặn các lỗi logic khi gọi biến chưa được khởi tạo. Đây là cách JS buộc bạn phải viết code tuân thủ luồng dữ liệu (data flow) từ trên xuống dưới.