shadow-cljs会自动设置,参考这里
re-frame的template中会自动生成一个变量,其中使用了 ^boolean
这个type hint
(def debug?
^boolean goog.DEBUG)
这个^boolean的type hint比较特殊,可以防止 if 被编译为 checked evaluation (因为0和"“在ClojureScript中是true,在JavaScript中是false,所以正常的编译需要编译为 checked evaluation)
具体来说
(when js/goog.DEBUG
(js/console.log "hello world"))
会被编译为
if(cljs.core.truth_(goog.DEBUG)){
console.log("hello world");
} else {
}
这样后面的优化器在goog.DEBUG为false时,无法消除这段代码。
而
(when ^boolean js/goog.DEBUG
(js/console.log "hello world"))
会被编译为
if(goog.DEBUG){
console.log("hello world");
} else {
}
这样babel等js的优化器,就能做优化了