词法作用域

clojure 新手指南(12):本地绑定&词法作用域

喜欢而已 提交于 2019-12-02 10:11:10
如果你还没忘的话,仔细回想一下,之前我们是如何将对象绑定到变量名上的。但当时我们只是全局绑定,在那时这种绑定是非常有用的。不过,有很多时候,本地绑定往往比全局绑定更合适,例如把变量限制在一个操作内部的时候。下面就让我们看看如果使用绑定函数 "let " 进行本地绑定。 =>id java.lang.Exception: Unable to resolve symbol: id... =>(let [id 1] (println id)) 1 nil =>id java.lang.Exception: Unable to resolve symbol: id... 正向你看到的南阳,通过使用"let" 操作,我们把1绑定到了”id“这个变量名上。然后我们又把它打印了出来。当这个操作执行完后,我们在外面查看”id“时却是无法解析的。这就证明了变量”id“只存在于操作内部(本地绑定类似于java中的方法局部变量)。 本地绑定可以将变量限制在某个操纵内,这样就不会造成对其他操作的变量污染。试想一下,如果没有本地绑定,一旦我们使用了id这个变量名后,我们就再也不能使用它来绑定其他对象了。使用本地绑定后,我们可以在某个操作内使用任何有意义的变量名而不用担心和其他相同名字的变量造成冲突,即使是全局变量: =>(def id 0) ;;全局绑定 #'user/id =>id 0 =>(let