The difference (like the author states) is that JS & family has mutable data by default, while Clojurescript defaults to immutable such. You have to specify that you want your vectors and maps etc to be transient (fancy pants word for mutable).<p>You want immutability - think about it: how large % of your bugs are due to more than one procedure changing the value of one variable, and state getting out of sync?<p>For me in my JS day job, it is definitely a majority of the bugs we create. We also code very defensively to protect us against this.<p>In CLJS on the other hand, you'd have immutable data, and in tight loops where allocating objects would be expensive, you make your data transient, and then mutate it as much as you wish.<p>Living your life with immutable values is a serious improvement. Not only to code, but honestly quality of life.<p>Edit: Clojure doesn't return whole new data structures under the hood, but you never notice that. Here is a great explanation, prepare for (= (mind article) :blown) => <a href="http://hypirion.com/musings/understanding-persistent-vector-pt-1" rel="nofollow">http://hypirion.com/musings/understanding-persistent-vector-...</a>