Elisp: Lexical and Dynamic Binding
在Lexical Binding下使用let绑定本地变量时,这些变量仅在let被包围的body中有效。在其他的代码中,它们有其他的含义,所以如果你在body中调用其他的函数,这些let绑定的本地变量对这些函数不可见。
;;; -*- lexical-binding: t -*- (setq x 0) (defun getx () x) (setq x 1) (let ((x 2)) (getx)) ;; ==> 1
在Dynamic Binding下使用let绑定本地变量时,这些变量在let表达式的整个执行周期内都有效。所以如果你在body中调用其他的函数,这些let绑定的本地变量对这些函数是可见的。
;;; -*- lexical-binding: nil -*- (setq x 0) (defun getx () x) (setq x 1) (let ((x 2)) (getx)) ;; ==> 2