Recs.
Updated
SpecsUpdate
Pros
Pro Live interactive programming with figwheel
Figwheel builds your ClojureScript code and hot loads it into the browser as you are coding! Every time you save your ClojureScript source file, the changes are sent to the browser so that you can see the effects of modifying your code in real time.
Pro Targets Google Closure-ready JavaScript for immense optimizations
Google's Closure Compiler converts regular JavaScript into a highly optimized form - including dead code analysis/elimination. It can even remove pieces of unused code from 3rd party libraries (eg, if you import jQuery but only use one function, Google Closure includes only that piece).
Pro Base language Clojure is very good
Clojure is designed on sound principles. The philosophies of functional programming, immutable data structures, value-oriented programming, and interactive programming all flow through the language to powerful effect.
Pro True code re-use
Node.js has promised us code reuse between front-end and back-end which in reality turned out to be a huge myth and mostly lies. Even though you're dealing basically with the same environment (Javascript) on both back-end and front - you still have to write separate code portions targeted specifically for one or another.
Turns out with Clojurescript that becomes a reality. Despite the fact that traditionally Clojurescript projects run on JVM in the back-end and in Javascript on the front.
Pro Clojure spec
Unfamiliar people very often complain that Clojure is dynamically typed and there's no way to verify correctness of the program. Little they know - there's Clojure Spec. There are not too many type systems out in the wild that are as capable as Spec. Can you easily verify that a function always returns a prime number? In Spec that's trivial. Combined with generative testing Spec gives you an incredible leverage to build robust, solid and predictable programs.
Pro Excellent tools for web development
ClojureScript has superb wrappers around React.js (see Reagent) that make building single-page apps a breeze. With figwheel, it's a web dev experience unlike any other -- hotloaded code, repl interaction, and instantly reflected changes make good development fun and fast. You can add things like Garden to make CSS-writing part of the same holistic experience and suddenly all development is a pleasant, smooth process.
Pro The Spec core library
From the creator of Clojure:
"Spec is a new core library (Clojure 1.9 and Clojurescript) to support data and function specifications in Clojure.
Writing a spec should enable automatic: Validation, Error reporting, Destructuring, Instrumentation, Test-data generation and Generative test generation."
Pro Live interactive programming with figwheel
Figwheel builds your ClojureScript code and hot loads it into the browser as you are coding! Every time you save your ClojureScript source file, the changes are sent to the browser so that you can see the effects of modifying your code in real time.
Cons
Con Language's functional paradigm is a hurdle for most developers
While the paradigm is part of what should attract users to the language, it's not for the faint of heart. If you've never programmed in a Lisp dialect before, expect to spend a few months becoming proficient in it.
Con Syntax may seem cryptic to people not used to Lisp
Lisp is sometimes called "syntax-less" and this is bewildering to those steeped in Algol-type syntax (Java, Javascript, C, etc). Being a dialect of Lisp, ClojureScript's syntax may seem cryptic and hard to understand for people not used to it. While Lisp has very little syntax compared to other languages and it's generally considered pretty terse, there's still an initial overhead in learning the language.
Con The syntax may be hard to learn
Being a dialect of Lisp, ClojureScript's syntax may seem cryptic and hard to understand for people not used to it. While Lisp has very little syntax compared to other languages and it's generally considered pretty terse, there's still an initial overhead in learning the language.
But, there's no operator precedence to keep track of, and no mutable local variables that make state hard to keep track of.
Recommendations
Comments
Flagged Pros + Cons
Pro Share application logic between browser and Clojure server
Clojure is also able to run web servers, so one can reap similar benefits to NodeJS in terms of sharing code between client and server.