второй вариант лучше как-то так:
var eventRunning= new EventRouter
......
eventRunner.listen( function( value ){
return value * 1000
} )
......
function a( value ){
eventRunning( value )
}
но события имеет смысл применять лишь когда обработчиков может быть произвольное число(0, 1, много) и результат их отработки нам не особо важен. а даже если какой-нибудь из них упадёт с исключением - это его личные трудности и нас они не касаются.
коллбэки дают более простую логику работы, так что где не требуются события лучше применять их