Ở browser, var khai báo tại global scope trở thành thuộc tính của window, còn let/const thì không — chúng nằm trong một script scope riêng mà spec gọi là declarative environment record.
javascript
var a = 1
let b = 2
const c = 3
window.a // 1
window.b // undefined
window.c // undefined
Object.keys(window).includes('a') // trueHệ quả thực tế — var ở global đụng thẳng vào API sẵn có của browser:
javascript
var name = 'Định' // ghi đè window.name (vốn là string của browser)
var location = '/home' // KHÔNG ghi đè được — gán vào location là chuyển trang ngay sang /homeĐây là một lý do nữa để bỏ var ở phạm vi global, ngoài chuyện function scope.
globalThis là cách tham chiếu global chuẩn, chạy ở mọi môi trường:
javascript
// cũ: phải tự đoán môi trường
const g = typeof window !== 'undefined' ? window : global
// nay:
globalThis.myApp = { } // browser → window, Node → global, Worker → selfGhi chú: trong ES module thì var ở cấp cao cũng không vào window, vì module có scope riêng.
Khác biệt này chỉ áp cho script cổ điển (<script> không có type="module").