这篇文章首先介绍作用域相关的知识,主要是比较 dynamic scope 与 static(或 lexical) scope 语言的优劣势;然后分析 Python 中为什么需要 global 和 nonlocal,Javascript 为什么有变量提升,我这里不仅仅是介绍 what,更重要的是 why,要知道这两门语言的设计者都是深耕 CS 领域多年的老手,不会轻易犯错的,肯定有 “不为人知” 的一面,但遗憾的是网上大部分文章就是解释 what,很少有涉及到 why 的,希望我这篇文章能够填充这一空缺;最后介绍闭包这一重要概念。