การอ้างอิงแบบวงกลมจะเกิดขึ้นหากวัตถุสองชิ้นที่แยกจากกันผ่านการอ้างอิงถึงกัน
ในเบราว์เซอร์รุ่นเก่า การอ้างอิงแบบวงกลมเป็นสาเหตุของหน่วยความจำรั่ว ด้วยการปรับปรุงอัลกอริธึมการรวบรวมขยะ ซึ่งขณะนี้สามารถจัดการกับวงจรและการพึ่งพาแบบวนรอบได้ดี จึงไม่เป็นปัญหาอีกต่อไป
อย่างไรก็ตาม จากมุมมองของการออกแบบล้วนๆ การอ้างอิงแบบวงกลมยังคงเป็นสิ่งที่ไม่ดีและมีกลิ่นของโค้ด การอ้างอิงแบบวงกลมบอกเป็นนัยว่าวัตถุ 2 ชิ้นที่อ้างอิงถึงกันนั้นเชื่อมโยงกันอย่างแน่นหนา และการเปลี่ยนแปลงไปยังวัตถุหนึ่งอาจต้องมีการเปลี่ยนแปลงในอีกวัตถุหนึ่งด้วย
หลีกเลี่ยงการอ้างอิงแบบวงกลม
ไม่มีวิธีใดที่จะหลีกเลี่ยงการอ้างอิงแบบวงกลมใน JS ขึ้นอยู่กับกรณีการใช้งานและสถานการณ์และอาจจำเป็นในบางกรณี เราสามารถยกตัวอย่างเพื่อทำความเข้าใจสิ่งนี้:
สมมุติว่าคุณมีสิ่งของ 2 ชิ้นคือ Dog และ Person คุณต้องการให้อ้างอิงถึงเจ้าของสุนัขได้โดยใช้สิ่งของของสุนัขและสัตว์เลี้ยงของคนที่ใช้สิ่งของนั้น
let dog = new Dog(); let person = new Person(); // Creating a circular reference dog.owner = person person.pet = dog
ในสถานการณ์ส่วนใหญ่ คุณจะต้องเข้าถึงวัตถุเพียงชิ้นเดียวและสืบทอดอีกวัตถุหนึ่งจากวัตถุนั้น เพื่อให้คุณสามารถทำลายลิงก์ใดลิงก์หนึ่งได้ ถ้าไม่เช่นนั้น คุณสามารถใช้แผนที่เพื่อทำแผนที่วัตถุในสถานการณ์ย้อนกลับได้ แต่แทนที่จะใช้การแฮ็ก ปล่อยให้ผู้อ้างอิงวงกลมอยู่ที่นั่นดีกว่า