JavaScript什么是词汇范围?
什么是词汇作用域简介?
回答:
我通过示例了解它们。:)
首先,采用类似C的语法的 词汇作用域 (也称为 静态作用域 ):
void fun(){
int x = 5;
void fun2()
{
printf("%d", x);
}
}
每个内部级别都可以访问其外部级别。Lisp的第一个实现使用另一种称为动态范围的方式,再次使用类似C的语法:
void fun(){
printf("%d", x);
}
void dummy1()
{
int x = 5;
fun();
}
void dummy2()
{
int x = 10;
fun();
}
在这里fun
既可以访问x
的dummy1
或dummy2
,或x
在调用任何函数fun
与x
在其声明。
dummy1();
将打印5
dummy2();
将打印10。
第一个称为静态,因为它可以在编译时推导,第二个称为动态,因为外部范围是动态的,并且取决于函数的链调用。
我发现静态范围界定对眼睛来说更容易。最终,大多数语言都采用了这种方式,甚至Lisp也是如此(对吗?)。动态作用域就像将所有变量的引用传递给调用的函数一样。
作为为什么编译器无法推断函数外部动态范围的示例,请考虑我们的最后一个示例。如果我们这样写:
if(/* some condition */) dummy1();
else
dummy2();
调用链取决于运行时条件。如果为true,则调用链如下所示:
dummy1 --> fun()
如果条件为假:
dummy2 --> fun()
fun
两种情况的外部范围都是调用方加上调用方的调用方,依此类推。只需提及C语言既不允许嵌套函数也不允许动态作用域。
以上是 JavaScript什么是词汇范围? 的全部内容, 来源链接: utcz.com/qa/398168.html