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

Top