最常用的方法是console.log

时间:2018-03-26 23:25:47

标签: clojurescript

这两种格式产生console.log("Hello")

(.log js/console "Hello")
(js/console.log "Hello")
(console.log "Hello")

一种形式比其他形式更惯用吗?

编辑:我也注意到(console.log)也有效(仅使用shadow-cljs测试)

1 个答案:

答案 0 :(得分:1)

我怀疑(js/console.log "Hello")更常用于野外,但两种形式都是惯用的。

如果您正在寻找有关使用哪一个的指导,(.log js/console "Hello")感觉更“正确”,而(js/console.log "Hello")对我感觉就像您在ClojureScript中嵌入了一点JavaScript(通过在符号中滥用点以实现嵌套属性访问。)

我在第一次介绍js伪命名空间时,即使Rich used this very construct也这样说。

使用“普通”互操作结构的一个一般优点是编译器可以帮助您。例如,尝试

(defn set-top [console antenna]
  (js/console.log "Hello"))

并通过(set-top :x :y)调用此方法。你会得到一个神秘的错误指示

TypeError: console.log is not a function

但如果你写了

(defn set-top [console antenna]
  (.log js/console "Hello"))

您将在编译时获得非常有用的警告

WARNING: js/console is shadowed by a local

这是因为您正在编写 ClojureScript 而不是在ClojureScript符号中嵌入JavaScript语义,因此ClojureScript编译器可以为您提供帮助。