【发布时间】:2013-02-22 16:03:56
【问题描述】:
在static scoping, 中,标识符可以通过分析/解析源代码来确定(相对于动态范围,它或多或少需要知道调用者环境)。
我的问题是这样的,因为静态作用域只需要解析源代码以了解作用域和标识符绑定,是在编译时进行的作用域环境/标识符绑定,还是在每个函数(或新作用域)时确定这些绑定) 被访问。
JavaScript 示例:
var globalVar;
function fooFunc() {
var fooVar;
function barFunc() {
var barVar;
}
}
在这个简单的 JavaScript 示例中,我可以通过检查程序直观地确定 barFunc 环境将具有一个 barVar 变量,并且该环境具有具有 fooVar 和 barFunc 函数的父环境,并且具有父环境具有 globalVar 的全局范围。我很好奇编译器/解释器是否将源代码作为一个整体读取并进行绑定,或者这些确定是在逐个函数(或逐个作用域)的基础上做出的。
如果我不清楚,请告诉我。
谢谢,
编辑:虽然我的示例是用 JavaScript 编写的(我对此特别好奇),但我也很好奇这在不同语言(即 JavaScript、C/C++、C#/VB 等)之间是否存在差异.)
【问题讨论】:
标签: javascript compiler-construction environment-variables scope