×

Sự Khác Biệt Giữa let, const và var trong JavaScript

Sự Khác Biệt Giữa let, constvar 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.
  • 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ằng let 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ỗi ReferenceError nếu truy cập biến trước khi khai báo.
  • 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).
  • Hoisting (Kéo lên):

    • Giống như let, biến khai báo bằng const 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á 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.
  • 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