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