• 变量

    变量

    在一个命名空间中定义变量可以这样写, 下面的代码可以在 Lumo 当中试验:

    1. (def a 1)
    2. ; #'cljs.user/a

    也有局部的绑定, 通过 let 来定义:

    1. (let [x 1
    2. y 2]
    3. (+ x y))
    4. ; 3

    数据绑定之后, 一不可以修改.

    在 cljs 环境里用到可变状态, 需要通过 Atom 类型定义可变状态:

    1. (def b (atom 1))
    2. ; #'cljs.user/b

    Atom 类型是一个引用, 每次读取最新的数据时需要通过 @b 语法来取最新的值, 或者 (deref b). 一般为了突出可变状态, 会使用 *b 这样的命名习惯. 这样定义和修改状态就是:

    1. (def *b (atom 1))
    2. ; #'cljs.user/b
    3. (reset! *b 2)
    4. ; 2

    由于前端经常使用热替换机制, 所以专门的函数, 避免热替换后重新计算绑定.
    defonce 一般是和 Atom 类型配合使用:

    1. (defonce *c (atom 1))
    2. ; #'cljs.user/*c