Biến được tạo mà không có từ khoá khai báo (var, let, const) luôn là biến toàn cục, kể cả khi được tạo trong hàm
Khác với var
¶
Các biến được khai báo với var
có phạm vi function scope
, còn với let
, const
thì nó phạm vi block scope
-
function scope
: Biến được khai báo dùng được trong toàn bộ function
block scope
: Biến được khai báo chỉ sử dụng được trong block {} nơi mà nó được khai báo
function usingLet() {
let x = 1;
if (true) {
let y = 2;
console.log(x); // 1
}
console.log(y); // Error: y is not defined
}
Hoặc đối với biến trong vòng for:
let vs const¶
-
let
: biến đã khai báo có thể được gán lại
const
: biến đã khai báo không thể được gán lại
const constVar = 'Only god can change me';
if (true) {
constVar = 'Don\'t try to change me'; // Error: invalid assignment
}
Tuy nhiên nếu const là object thì giá trị của object vẫn có thể bị thay đổi. Chỉ không thể bị gán thành object khác mà thôi.