Kết quả của đoạn mã sau là gì?
(function() {
var a = b = 5;
})();
console.log(b);
Trả lời:
Đáp án đúng: B
Đoạn mã JavaScript này minh họa một lỗi phổ biến liên quan đến phạm vi biến. Khi bạn viết `var a = b = 5;` bên trong một hàm, điều này có nghĩa là:
1. `b = 5;`: Nếu `b` chưa được khai báo trước đó, JavaScript sẽ tự động khai báo `b` ở phạm vi toàn cục (global scope). Điều này xảy ra vì JavaScript gán giá trị từ phải sang trái.
2. `var a = b;`: Biến `a` được khai báo bằng `var` bên trong hàm, do đó `a` có phạm vi cục bộ (local scope) trong hàm.
Khi `console.log(b);` được gọi bên ngoài hàm, nó sẽ in giá trị của biến `b` đã được khai báo ở phạm vi toàn cục. Do đó, kết quả sẽ là `5`.
**Giải thích tại sao các đáp án khác sai:**
* **A. null:** `b` không được gán giá trị `null` ở bất kỳ đâu trong đoạn mã.
* **C. undefined:** `b` đã được gán giá trị `5` trước khi `console.log(b)` được gọi.
* **D. Xảy ra lỗi:** Đoạn mã không gây ra lỗi, vì `b` được khai báo ngầm ở phạm vi toàn cục.





