Scope chain là gì?

Phrase None

JavaScript sử dụng scope chain để tìm các biến có thể truy cập trong một scope nhất định. Khi một biến được tham chiếu, JavaScript sẽ tìm kiếm nó trong scope hiện tại và tiếp tục đến scope cha cho đến khi nó đạt đến global scope. Chuỗi scopes được duyệt qua này được gọi là scope chain.

Ví dụ: hãy xem xét đoạn code dưới đây:


// Define a variable in the global scope:
const fullName = "Oluwatobi Sofela";

// Define nested functions:
function profile() {
  function sayName() {
    function writeName() {
      return fullName;
    }
    return writeName();
  }
  return sayName();
}

Trong đoạn code trên, bất cứ khi nào hàm profile () được gọi, trước tiên máy tính sẽ gọi hàm sayName () (là code duy nhất trong hàm profile ()).

Thứ hai, máy tính sẽ gọi hàm writeName () (là codeduy nhất trong hàm sayName ()).

Tại thời điểm này, vì code trong writeName () hướng dẫn máy tính gọi và trả về (return) nội dung của biến fullName, máy tính sẽ gọi fullName. Nhưng nó sẽ không di trực tiếp đến global scope để gọi fullName.

Thay vào đó, máy tính phải đi từng bước qua scope chain để tìm lexical scope của fullName.

Vì vậy, đây là các bước tuần tự mà máy tính phải thực hiện để xác định lexical scope của fullName:

  • Đầu tiên, máy tính sẽ kiểm tra xem fullName có được định nghĩa cục bộ trong hàm writeName () hay không. Nhưng nó sẽ không tìm thấy định nghĩa fullName ở đó, vì vậy nó chuyển sang scope tiếp theo để tiếp tục nhiệm vụ của mình.
  • Thứ hai, máy tính sẽ tìm kiếm định nghĩa của fullName trong sayName (). Tuy nhiên, nó không tìm thấy nó ở đó, vì vậy nó chuyển sang scope tiếp theo.
  • Thứ ba, máy tính sẽ tìm kiếm định nghĩa của fullName trong hàm profile (). Tuy nhiên, vẫn không tìm thấy fullName ở đó. Vì vậy, máy tính sẽ tiếp tục tìm kiếm lexical scope của fullName trong scope tiếp theo.
  • Thứ tư, máy tính đi đến global scope. May mắn thay, nó tìm thấy định nghĩa của fullName ở đó! Do đó, nó sẽ lấy nội dung của nó ("Oluwatobi Sofela") và trả về nó.
Learning English Everyday