Las otras respuestas aquí son buenas, pero hay otra razón: en la mayoría de los casos, no puede tener funciones de JavaScript prácticas y puras.
Ignoremos la interfaz de usuario por un momento y supongamos que está creando una aplicación que realizó algún tipo de cálculo. Si todas las funciones llamadas en su aplicación eran puras, entonces simplemente podría evaluar todo el programa en tiempo de compilación hasta un valor constante (todo es puro, ¡solo calcule la respuesta!).
Tan pronto como comience a tratar con IO (en el caso de Redux, haciendo solicitudes de red, accediendo a localStorage, IndexedDB, etc.), ahora se enfrenta a un código que ya no es puro.
- ¿Cuál es la mejor herramienta de diseño de bases de datos MySQL para tablas y procedimientos almacenados?
- ¿Qué debo usar en mi sitio web, AngularJS 1 o AngularJS 2?
- Cómo convertirse en desarrollador front-end en 2017
- ¿Cuáles son los pasos que sigue para optimizar un sitio web?
- ¿Es mejor proporcionar toda la página a la vez o devolverla en partes?
Cuando tenga que lidiar con un código que tenga efectos secundarios (y lo hará, mucho) tendrá que hacer excepciones. No hay una forma práctica de incluir en la lista blanca ciertas funciones que inducen efectos secundarios y prohibir otras. E incluso si lo hiciera, hacer cumplir tal prohibición probablemente proporcionaría muy pocos beneficios en general en comparación con el costo.