ClojureScript 函数总是被执行
ClojureScript function is always executed
我正在学习 ClojureScript,我有两个函数可以更改 "root-app" div 中的内容:
(ns blog.core)
(defn mount-components []
(let [content (js/document.getElementById "root-app")]
(while (.hasChildNodes content)
(.removeChild content (.-lastChild content)))
(.appendChild content (js/document.createTextNode "Wilkommen zu mein
ekelhaft blog!!"))))
(defn init! []
(def current_url js/window.location.href)
(if (clojure.string/includes? current_url "about")
(.log js/console (str "Whatever URL ->>>" js/window.location.href))
(mount-components)))
在 http://localhost:3000/about because the "root-app" div exists in that page, but in http://localhost:3000/blog 中一切正常,我收到错误消息:
因为那个页面没有div。这一切都很奇怪,因为看起来 ClojureScript 实际上发现:
(if (clojure.string/includes? current_url "about")
实际上是 false en console.log 没有被打印出来。
我的问题是:为什么函数 mount-components 运行s 并发送错误消息,即使条件 if 是假的?奇怪的是 console.log:
(.log js/console (str "Whatever URL ->>>" js/window.location.href))
不 运行 但 mount-components 函数可以。我想我不理解 ClojureScript 工作方式中的 "sequence"。
我不确定,但是根据你的描述,我觉得你想的逻辑和你实际测试的逻辑是不一样的。您的 if 语句在 URL 中查找单词 'about'。如果它在那里,那么它会打印控制台日志,即它将在那里 http://localhost:300/about。如果它不存在,它将 运行 mount-components 函数,它会查找您所说的 div ID 不包含在页面中,因此您会收到错误消息。 mount-components 是一个 ELSE 语句,因此在测试为假时执行。
if
形式的工作方式类似于 (if cond true-branch false-branch)
,因此您的 (mount-component)
会被执行,因为它位于 false 分支中。查看 when,它只有一个真正的分支。
我正在学习 ClojureScript,我有两个函数可以更改 "root-app" div 中的内容:
(ns blog.core)
(defn mount-components []
(let [content (js/document.getElementById "root-app")]
(while (.hasChildNodes content)
(.removeChild content (.-lastChild content)))
(.appendChild content (js/document.createTextNode "Wilkommen zu mein
ekelhaft blog!!"))))
(defn init! []
(def current_url js/window.location.href)
(if (clojure.string/includes? current_url "about")
(.log js/console (str "Whatever URL ->>>" js/window.location.href))
(mount-components)))
在 http://localhost:3000/about because the "root-app" div exists in that page, but in http://localhost:3000/blog 中一切正常,我收到错误消息:
因为那个页面没有div。这一切都很奇怪,因为看起来 ClojureScript 实际上发现:
(if (clojure.string/includes? current_url "about")
实际上是 false en console.log 没有被打印出来。
我的问题是:为什么函数 mount-components 运行s 并发送错误消息,即使条件 if 是假的?奇怪的是 console.log:
(.log js/console (str "Whatever URL ->>>" js/window.location.href))
不 运行 但 mount-components 函数可以。我想我不理解 ClojureScript 工作方式中的 "sequence"。
我不确定,但是根据你的描述,我觉得你想的逻辑和你实际测试的逻辑是不一样的。您的 if 语句在 URL 中查找单词 'about'。如果它在那里,那么它会打印控制台日志,即它将在那里 http://localhost:300/about。如果它不存在,它将 运行 mount-components 函数,它会查找您所说的 div ID 不包含在页面中,因此您会收到错误消息。 mount-components 是一个 ELSE 语句,因此在测试为假时执行。
if
形式的工作方式类似于 (if cond true-branch false-branch)
,因此您的 (mount-component)
会被执行,因为它位于 false 分支中。查看 when,它只有一个真正的分支。