Apabila kita menetapkan null kepada pembolehubah global, dengan itu secara aktif membatalkan rujukan dan membebaskan ingatan, adakah ini strategi pengiraan rujukan? Bukankah ini bermakna mekanisme kutipan sampah JS hanya menggunakan tanda dan jelas? Adakah strategi pembersihan markah tidak melibatkan penyahrujukan?
Pengisytiharan pembolehubah memperuntukkan memori pada timbunan Menandakan rujukan yang sepadan sebagai batal memberitahu penterjemah bahawa ruang memori yang sepadan dengan pembolehubah ini boleh dituntut semula.
Tetapi ini adalah reka bentuk sintaks JS dan tidak melibatkan butiran pengurusan memori dalam pelaksanaan penterjemah. Malah, strategi GC pelayar juga berbeza. Chrome/Firefox/Safari menggunakan tanda dan sapu, manakala versi lama IE menggunakan pengiraan rujukan.
Selain itu, penyahrujukan bukan sahaja dalam bentuk penugasan batal. Jurubahasa boleh menentukan kitaran hayat pembolehubah melalui skop, dan menuntut semula ruang memori pembolehubah apabila mereka meninggalkan skop pembolehubah.
[Mark Clearance] dan [Reference Counting] ialah dua algoritma GC yang berbeza, manakala [Dereference] ialah ciri tatabahasa dalam JS Kedua-duanya boleh berbentuk ortogon (tidak relevan).
Spesifikasi js adalah menggunakan tanda dan jelas, tetapi jika dilaksanakan, ia mungkin tidak selalunya tanda dan jelas.
Sebab anda keliru di sini adalah kerana anda hanya melihat penampilan kitar semula dan gagal melihat intipati pembersihan.
Pengiraan rujukan, seperti namanya, mengira rujukan kepada objek, dan apabila rujukannya ialah 0, ia dikitar semula.
Tanda dan jelas dibahagikan kepada dua fasa Fasa penandaan bermula dari akar dan melintasi objek yang boleh dicapai, dan kemudian objek yang tidak ditanda dikitar semula dalam fasa pembersihan.
Malah, melainkan anda melihat kepada pelaksanaan kod sumber, sukar untuk mengetahui strategi apa yang digunakan dari permukaan.