Khai báo biến là bước bắt buộc trước khi sử dụng. Biến là "container" có tên – lưu trữ dữ liệu để tham chiếu, tái sử dụng, thao tác trong chương trình.
Tại sao phải khai báo?
- Đăng ký tên trong scope hiện tại (global, function, block).
- Phân bổ bộ nhớ (engine cấp phát slot trong Lexical Environment).
- Khởi tạo giá trị mặc định (
undefinedchovar/let, uninitialized choconst). - Cho phép gán giá trị sau (initialization/assignment).
Cú pháp khai báo
// Khai báo đơn lẻ
var rank;
let points;
const MAX_LEVEL = 100;
// Khai báo nhiều biến cùng từ khóa
var rank, points, level;
let a = 1, b = 2, c = 3; // Có thể gán giá trị ngay
// Khai báo và gán (initialization)
var name = "Amit";
let score = 100;
const PI = 3.14159;
3 từ khóa khai báo (ES6+)
| Từ khóa | Scope | Hoisting | Re-assign | Re-declare | Khởi tạo bắt buộc |
|---|---|---|---|---|---|
var | Function | Có (init = undefined) | Có | Có | Không |
let | Block | Có (TDZ) | Có | Không | Không |
const | Block | Có (TDZ) | Không | Không | Có |
Quy tắc đặt tên biến
- Bắt đầu bằng chữ cái,
_, hoặc$(không bắt đầu bằng số). - Chứa: chữ cái, số,
_,$. - Phân biệt chữ hoa/thường:
name≠Name. - Không dùng từ khóa dành riêng (
for,if,const...). - Không dùng từ khóa dự trữ (
enum,await...).
Ví dụ hợp lệ / không hợp lệ
// Hợp lệ
var name;
var _private;
var $element;
var userName;
const MAX_SIZE = 100;
// Không hợp lệ
var 2name; // Bắt đầu bằng số
var user-name; // Có dấu gạch ngang
var class; // Từ khóa dành riêng
var export; // Từ khóa dự trữ
Initialization (Khởi tạo) vs Assignment (Gán)
var x; // Declaration + Initialization (giá trị = undefined)
x = 10; // Assignment (gán giá trị)
var y = 20; // Declaration + Initialization + Assignment cùng lúc
Best Practice hiện đại
- Mặc định dùng
const– bất biến, an toàn, rõ ý định. - Cần gán lại → dùng
let. - Tránh
var– function scope, hoisting gây bug. - Khai báo gần nơi sử dụng nhất (block scope).
- Đặt tên có ý nghĩa:
userCountthay vìuc. - Dùng
constcho object/array – vẫn cho phép sửa nội dung, chỉ cấm gán lại biến.