Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Ví dụ Circular Reference trong JavaScript

Circular reference: 2 object tham chiếu lẫn nhau (A→B, B→A).

Ví dụ kinh điển

let dog = new Dog();
let person = new Person();
dog.owner = person;
person.pet = dog; // circular

Phân tích

  • Trình duyệt cũ (ref-counting GC): gây memory leak.
  • GC hiện đại (mark-and-sweep): **không leak**, xử lý chu trình tốt.
  • Thiết kế: **code smell** — tight coupling, khó test, khó serialize (JSON.stringify lỗi).

Giải pháp

  • Giữ 1 chiều (owner HOẶC pet), tra ngược qua ID/Map khi cần.
  • Dùng WeakMap cho mapping ngược (không cản GC).
  • Nếu bắt buộc 2 chiều — chấp nhận, document rõ ràng.