Вы не подумайте, что я о том, что JS - плохой язык, я о том, что в языках с поздним связыванием + возможностью манкипатчинга, чистота функций - это условность, договоренность между людьми. Контракт. Можно считать любую функцию, которая не делает IO (в случае JS это еще и манипуляции с домом) + не ковыряется во входных параметрах, чистой. Чище язык сделать не позволяет