Both force you to use a more declarative/functional programming style than pure JS. ClojureScript is more like a JS replacement, whereas Elm is more like a replacement for the entire web development stack (HTML/CSS/JS).
Other differences:
- Elm syntax is much more Haskell-like
- ClojureScript is much closer to traditional Lisp syntax
- Elm is highly optimized for time-varying values (“signals” in Elm)
- ClojureScript is more mature and you can find some sweet development tools for it (Eclipse plug-ins, LightTable, etc.)
- Elm is statically typed, ClojureScript is dynamically typed
Hope this helps. I’m still learning both of these languages so I may have missed something.