我们说编译器的范围是静态的,而解释器的范围是动态的,所以这里的Scope这个词的意义是什么?为什么在编译器的情况下它是静态的,在解释器的情况下是动态的?
答案 0 :(得分:2)
我们说编译器的范围是静态的,而解释器的范围是动态的
那不是真的。语言的动态或静态范围是语言的属性,而不是实现,并且为静态范围的语言(或者用于动态范围的语言的编译器)编写解释器是完全可能的(并且是常见的)。这很重要,但动态范围的语言并不常见。)
这里的范围是什么意思
变量的范围描述了程序的哪些部分变量的名称是指该变量。因此,如果您在第23行定义名为x
的变量,在第42行定义另一个名为x
的变量,然后在程序中的某处引用x
,则作用域规则决定是否指向在第23,42行或两者都没有定义的变量(在这种情况下,你通常会得到类似"变量x不在范围内"错误,取决于语言)。
动态范围意味着函数f
可以看到在调用f
的其他函数中定义的任何变量。这是动态的,因为您无法确定(至少在一般情况下)f
(如果有)的定义在程序中给定位置的范围内而不运行它。因此,超出范围的错误必须是运行时错误。
静态范围(也称为词法范围)表示当且仅当变量在周围块中定义时,变量才在范围内。这是一个静态属性,可以在不运行程序的情况下轻松检查(除非涉及其他动态功能,例如在运行时定义变量的能力),因此术语"静态范围"。
为什么在编译器时是静态的,在解释器的情况下是动态的
不是。