> Best: > (do-some-thing) > Second best: > (do-some-thing this-way) > Not 3rd place: > (let ((control-behavior with-some-value)) > (in-function) ) That's 3rd-grade "knowledge". (Only a rough first approximation, if you prefer.) There's NO such "best", though convincing the Lexical Police of this is hardly worth trying. ;-) "Best" depends on the purpose/use. [The same applies to side effects and state. And to `quote' (which by itself destroys referential transparency). And to applicative order evaluation. And to... All such "dirty", more-difficult-to-prove/manage/manipulate, more complicated things have their uses/advantages.] There's are reasons that Common Lisp and Elisp provide not only lexical binding but _also_ dynamic binding. And the reasons are not just hysterical raisins. And Elisp has its own particular reasons, as it's a Lisp for an editor (and more). https://www.gnu.org/software/emacs/emacs-paper.html#SEC17 "It is not necessary for dynamic scope to be the only scope rule provided, just useful for it to be available..." https://www.gnu.org/software/emacs/emacs-paper.html#SEC18 "Some language designers believe that dynamic binding should be avoided, and explicit argument passing should be used instead..."