Phân biệt Var, Let, Const trong Javascript

0:44 25/04/2025

Trong JavaScript, var, let, và const đều dùng để khai báo biến, nhưng chúng có sự khác biệt quan trọng về phạm vi (scope), hoisting, và khả năng gán lại giá trị (mutability).

var

  • Scope: varfunction scope (phạm vi trong hàm) và không có block scope (phạm vi trong khối { }). 
  • Hoisting: Khi khai báo bằng var, biến sẽ được hoisting lên đầu phạm vi chứa nó nhưng không gán giá trị (undefined). 
  • Có thể gán lại giá trị: Bạn có thể gán lại giá trị cho biến khai báo bằng var.

🔹 Ví dụ:

console.log(a); // undefined (hoisting xảy ra)

var a = 10;

console.log(a); // 10

if (true) {

    var b = 20;

}

console.log(b); // 20 (Không có block scope)

Lưu ý: Dùng var có thể gây lỗi do biến có thể được truy cập ngoài phạm vi mong muốn.

let

  • Scope: letblock scope, nghĩa là biến chỉ tồn tại trong { } nơi nó được khai báo. 
  • Hoisting: Có hoisting nhưng không được gán giá trị trước khi khai báo (nên truy cập trước khi khai báo sẽ gây lỗi). 
  • Có thể gán lại giá trị.

Ví dụ:

console.log(x); // Lỗi: Cannot access ‘x’ before initialization

let x = 10;

console.log(x); // 10

if (true) {

    let y = 20;

    console.log(y); // 20

}

console.log(y); // Lỗi: y is not defined (vì y có block scope)

const

  • Scope: Giống let, constblock scope. 
  • Hoisting: Có hoisting nhưng không thể truy cập trước khi khai báo. 
  • Không thể gán lại giá trị: const yêu cầu phải gán giá trị ngay khi khai báo và không thể thay đổi giá trị của biến đó.

Ví dụ:

const PI = 3.14;

PI = 3.1415; // Lỗi: Assignment to constant variable

Lưu ý: Nếu const là một object hoặc array, bạn không thể gán lại giá trị mới, nhưng có thể thay đổi thuộc tính của object hoặc phần tử của array.

const person = { name: “Alice” };

person.name = “Bob”; // Được phép

person = { name: “Charlie” }; // Lỗi: Không thể gán giá trị mới

const numbers = [1, 2, 3];

numbers.push(4); // Được phép

numbers = [5, 6, 7]; // Lỗi

Tóm tắt sự khác biệt

Đặc điểm var let const
Scope Function Scope Block Scope Block Scope
Hoisting Có, gán undefined Có, nhưng không thể truy cập trước khai báo Có, nhưng không thể truy cập trước khai báo
Có thể gán lại giá trị?
Có thể khai báo lại?

Các bạn nên dùng let và const, tránh dùng var để tránh lỗi không mong muốn và dùng const khi giá trị không cần thay đổi, dùng let khi giá trị có thể thay đổi!

Giảng viên Võ Văn Mỹ
Bộ môn Công nghệ thông tin
FPT Polytechnic TP HCM

Đăng ký nhận đề thi thử 2025

Cùng chuyên mục

Đăng ký nhập học tại FPT Polytechnic 2025

  • Max. file size: 50 MB.
  • Max. file size: 50 MB.
  • Max. file size: 50 MB.