(let [x 42]
(defn foo [n] (+ x n)))
現在コンパイルされている
var x__1311 = 42;
cljs.user.foo = (function foo(n){
return (x__1311 + n);
});
に付けられた正確な番号x
は、もちろんコンパイルごとに異なる可能性がありcljs.user
、適切な名前空間名に置き換えられます。
生成された変数を JavaScript クロージャー内の無関係なコードから隠そうとする試みはありません。偶発的な衝突が起こる可能性は非常に低く、通常の ClojureScript では発生しません。
上記のようなことを発見するには{:optimizations :simple :pretty-print true}
、オプションの中からコンパイラを呼び出すか、REPL で JavaScript を発行するようにコンパイラに依頼することができます ( script/repl
ClojureScript ソース ツリーで提供されるかlein repl
、ClojureScript が依存関係として宣言された Leiningen プロジェクトで提供されます)。
(require '[cljs.compiler :as comp])
(binding [comp/*cljs-ns* 'cljs.user]
(comp/emit
(comp/analyze {:ns {:name 'cljs.user} :context :statement :locals {}}
'(let [x 42] (defn foo [n] (+ x n))))))