The ClojureScript wiki<https://github.com/clojure/clojurescript/wiki/Differences-from-Clojure>states that "the user experience of [binding] is similar to that in Clojure" but my very first experiment produced wildly different results between platforms.
Here's a Clojure on the JVM session: user=> (import java.lang.Thread) java.lang.Thread user=> (defn set-timeout [ms fn] (.run (Thread. #(do (Thread/sleep ms) (fn))))) #'user/set-timeout user=> (def x "top level") #'user/x user=> (binding [x "in binding"] (println x) (set-timeout 1000 #(println x))) in binding in binding nil And here's the analogous ClojureScript session: ClojureScript:cljs.user> (def x "top level") "top level" ClojureScript:cljs.user> (binding [x "in binding"] (println x) (js/setTimeout #(println x) 1000)) in binding 21 top level So ignoring the sequencing and nil vs timeout-id return values, the binding of 'x wasn't preserved in the asynchronous callback. I raised this issue in #clojure and @dnolen said that "that's the behavior there's nothing much to fix", but that didn't sit right with me. This seems like either 'binding is bugged, or maybe I don't understand something about its intent. On the topic of "Vars" proper, I understand their usefulness in repl-centric development, where you can redefine functions at runtime. The wiki also makes some mention of this, but I can't wrap my head around the context and jargon. I've run into this problem before in Javascript, where some level of indirection is necessary to support run-time redefinitions. You can't do `var fn = package.fn;` and dynamically redefine `fn` from `package` later because a copy of the reference is made. How does ClojureScript address this problem? Cheers, Brandon -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en