Latihan 1: Event Listener & Closure Leaks — Debugging

Latihan 1 dari materi Event Listener & Closure Leaks di Debugging — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Bangun createEmitter(): event emitter kecil yang menghitung listener per nama event dan bisa melaporkan event yang listener-nya menumpuk.

createEmitter() mengembalikan object dengan empat method:

  1. on(event, handler): simpan handler di daftar milik event, lalu kembalikan function unsubscribe. Saat dipanggil, unsubscribe membuang handler itu saja dari daftarnya.
  2. emit(event, payload): panggil semua handler milik event dengan payload, lalu kembalikan jumlah handler yang dipanggil. Event tanpa listener mengembalikan 0.
  3. count(event): kembalikan jumlah listener aktif untuk event. Event yang belum pernah didaftarkan hasilnya 0.
  4. leakReport(threshold): kembalikan array nama event yang listener-nya threshold atau lebih.

Kode pemanggil di bawah function sudah ada di kode awal, biarkan saja. Yang dinilai delapan baris console-nya, berurutan:

2
1
0
2
1
16
1
scroll

Ada juga cek tambahan: dua on("a"), unsubscribe yang pertama, lalu empat on("b") harus menghasilkan count("a") 1, count("b") 4, dan leakReport(3) berisi ["b"].

Hint