onxxx だとプロパティとして保持して 1 つだけ
on() や addEventListener(...) だと配列などで保持して複数
というのが一般的

だけど on で登録する関数が前に登録されてた関数を受け取れるようにすれば 保持する関数はひとつでいいし 呼び出し順の制御やそもそも呼び出さないとかできて便利かも?

let fn = () => {}

const on = (new_fn) => {
fn = new_fn.bind(null, fn)
}

on(() => {
console.log(1)
})

on(old => {
old()
console.log(2)
})

on(old => {
console.log(3)
old()
})

fn()
// 3
// 1
// 2