Scripting 为什么脚本语言使用动态范围规则?

Scripting 为什么脚本语言使用动态范围规则?,scripting,programming-languages,scope,Scripting,Programming Languages,Scope,有人知道为什么Scripting语言使用动态范围规则吗?我在网上找不到关于这件事的任何信息。部分原因是他们可以。与编译语言相比,脚本语言在访问变量方面已经有了很大的开销。添加动态范围很容易,添加有趣的功能(如闭包)也很容易。这里有一个关于动态范围的有用概述: 从 这包括: “动态范围界定作为一种工具非常有用 替换全局范围的 变量。函数可以说“let” 当前数字基数=16;打电话给其他人 功能;“以及其他功能 将全部以十六进制打印。然后 当它们返回时,以及基本设置 函数返回时,基函数将返回 不管它

有人知道为什么Scripting语言使用动态范围规则吗?我在网上找不到关于这件事的任何信息。

部分原因是他们可以。与编译语言相比,脚本语言在访问变量方面已经有了很大的开销。添加动态范围很容易,添加有趣的功能(如闭包)也很容易。

这里有一个关于动态范围的有用概述: 从

这包括:

“动态范围界定作为一种工具非常有用 替换全局范围的 变量。函数可以说“let” 当前数字基数=16;打电话给其他人 功能;“以及其他功能 将全部以十六进制打印。然后 当它们返回时,以及基本设置 函数返回时,基函数将返回 不管它是什么。”


脚本语言通常不具有。Scheme、Lua、Ruby和Python都是词汇范围。只有少数语言仍在使用动态范围,因为它使通过查看代码来推断代码正在做什么变得非常困难


当你说“动态范围”时,你想描述什么?

你意味着所有脚本语言都会这样做,而实际上只有少数脚本语言会这样做,比如Javascript和LISP等。@leppie:Javascript不是动态范围,大多数现代LISP也不是(common lisp允许您选择性地对变量进行动态作用域设置,但默认设置为静态作用域-scheme,clojure根本不允许动态作用域)。有趣的是,你提到了闭包,因为这些闭包在动态作用域中通常是不必要的/毫无意义的。还应该指出的是,大多数脚本语言都不实现动态作用域(无论多么简单)。