0

我正在学习 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中一切正常,因为该页面中存在“root-app” div,但在http://localhost:3000/blog中,我收到错误消息:

在此处输入图像描述

因为该页面中没有这样的 div。这一切都很奇怪,因为看起来 ClojureScript 实际上发现:

 (if (clojure.string/includes? current_url "about")

实际上是 false en console.log 没有打印。

我的问题是:为什么即使条件if为假,函数mount-components也会运行并发送错误消息?奇怪的是console.log:

 (.log js/console (str "Whatever URL ->>>" js/window.location.href))   

不运行,但mount-components功能可以。我想我不理解 ClojureScript 工作方式的“序列”。

4

2 回答 2

3

if表单的工作方式类似于(if cond true-branch false-branch),因此您(mount-component)的执行是因为它位于错误分支中。检查when,它只有一个真正的分支。

于 2017-10-14T14:34:16.630 回答
3

我不确定,但是根据您的描述,我认为您正在考虑的逻辑和您实际测试的逻辑并不相同。您的 if 语句在 URL 中查找单词“about”。如果它在那里,那么它会打印控制台日志,即它将在那里用于http://localhost:300/about。如果它不存在,它将运行 mount-components 函数,该函数会查找您所说的未包含在页面上的 div ID,因此您会收到错误消息。mount-components 是一个 ELSE 语句,因此在测试为假时执行。

于 2017-10-14T02:24:05.473 回答