Sự Khác Biệt Giữa let
, const
và var
trong JavaScript
Trong JavaScript, let
, const
, và var
là ba cách để khai báo biến. Mỗi từ khóa này có các đặc điểm và quy tắc phạm vi khác nhau. Dưới đây là sự khác biệt cụ thể giữa chúng.
1. var
-
Phạm vi (Scope):
var
có phạm vi hàm (function scope) hoặc phạm vi toàn cục (global scope) nếu nó không được khai báo bên trong một hàm.- Nó không có phạm vi khối (block scope), nghĩa là các biến khai báo bằng
var
sẽ tồn tại xuyên suốt các khối lệnh như if, for, v.v.
-
Hoisting (Kéo lên):
- Các biến khai báo bằng
var
được "kéo lên" đầu phạm vi hàm hoặc toàn cục và được khởi tạo với giá trịundefined
.
- Các biến khai báo bằng
-
Ví dụ:
function example() { console.log(x); // undefined (do hoisting) var x = 10; console.log(x); // 10 } example(); if (true) { var y = 20; } console.log(y); // 20 (var không có phạm vi khối)
2. let
-
Phạm vi (Scope):
let
có phạm vi khối (block scope). Biến khai báo bằnglet
chỉ tồn tại trong khối lệnh bao quanh nó.
-
Hoisting (Kéo lên):
- Biến khai báo bằng
let
cũng được kéo lên đầu phạm vi khối, nhưng không được khởi tạo cho đến khi dòng mã thực hiện đến nó. Điều này gây ra lỗiReferenceError
nếu truy cập biến trước khi khai báo.
- Biến khai báo bằng
-
Ví dụ:
function example() { // console.log(a); // ReferenceError: Cannot access 'a' before initialization let a = 10; console.log(a); // 10 } example(); if (true) { let b = 20; console.log(b); // 20 } // console.log(b); // ReferenceError: b is not defined (let có phạm vi khối)
3. const
-
Phạm vi (Scope):
- Giống như
let
,const
có phạm vi khối (block scope).
- Giống như
-
Hoisting (Kéo lên):
- Giống như
let
, biến khai báo bằngconst
cũng được kéo lên đầu phạm vi khối nhưng không được khởi tạo cho đến khi dòng mã thực hiện đến nó.
- Giống như
-
Giá trị bất biến (Immutable Value):
- Biến khai báo bằng
const
phải được khởi tạo ngay khi khai báo và không thể được gán lại giá trị khác sau đó. Tuy nhiên, nếu biến là một đối tượng hoặc mảng, nội dung của đối tượng hoặc mảng đó có thể thay đổi.
- Biến khai báo bằng
-
Ví dụ:
function example() { // console.log(c); // ReferenceError: Cannot access 'c' before initialization const c = 10; console.log(c); // 10 // c = 20; // TypeError: Assignment to constant variable. } example(); if (true) { const d = 20; console.log(d); // 20 } // console.log(d); // ReferenceError: d is not defined (const có phạm vi khối) const obj = { name: "Alice" }; obj.name = "Bob"; // OK, nội dung của đối tượng có thể thay đổi console.log(obj.name); // Bob // obj = { name: "Charlie" }; // TypeError: Assignment to constant variable.
Tổng Kết
Đặc điểm | var |
let |
const |
---|---|---|---|
Phạm vi | Hàm/toàn cục | Khối | Khối |
Hoisting | Có, giá trị ban đầu là undefined |
Có, nhưng không khởi tạo | Có, nhưng không khởi tạo |
Khởi tạo lại | Có thể | Có thể | Không thể |
Thay đổi nội dung | N/A | N/A | Có thể đối với đối tượng/mảng |
Hiểu rõ sự khác biệt giữa var
, let
, và const
sẽ giúp bạn quản lý biến trong JavaScript một cách hiệu quả và tránh các lỗi tiềm ẩn.
Comments