No es que JS sea un poco loco
Lo que sucede es que la consola muestra el valor por referencia de la variable, al estar por referencia asi se ponga el console log antes o despues del cambio, refrescara y mantendra actualizado en consola con el último cambio, y esto del paso por referencia se da en varios lenguajes como Java, C#. Si desea mostrar los valores antes y despues debe usar paso por valor, utilizando por ejemplo el spread operator.
