For example, I think there is a gradient from OCaml > Clojure > Haskell about using mutable data structures in your code, from Encourage > Discourage > Disallow. I think learning Haskell as your first FP might turn you off given how strict it is in this regard. So using that as a line of reasoning, using OCaml or ReasonML might be best since it lends an imperative hand whenever you need it, and lets you explore all of the amazing things FP has to offer.
CLJS has some warts due to the compiled JS being hard to understand (use source-maps) and the Clojure error messages being bad is now a meme but if you've not dealt with a Hindley Milner type system before, Clojure can help you learn some of the other basic FP concepts in a more gentle way.
I think it comes down to what you want to learn from FP and where you're coming from:
If you want to just "build stuff" and make it "more functional" ie using lots of data/values and passing around functions maybe go with Clojure.
If you're interested in how static types can make things easier to build more robust things but you only want to dip your toes into FP go with OCaml/Reason
If you want to see what it means to program 100% pure and have no side-effects (and you're willing to invest in learning and delaying instantly "shipping" something) go with Haskell/Purescript
Perhaps Common Lisp is a better example of a language in that part of the functional purity spectrum ?
Though their usage in public interfaces is not idiomatic Clojure and they come closely coupled with functions to transform them back to immutable values.
You can look up eg TransientArrayMap in ClojureScript internals to see how it's implemented on that side: https://github.com/clojure/clojurescript/blob/799d62fe3bba99...
I don’t know ReasonML specifically but one core difference to typed FP languages is that Clojure is less obstructive generally speaking.