栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaScript什么是词汇范围?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()    dummy1();else    dummy2();

调用链取决于运行时条件。如果为true,则调用链如下所示:

dummy1 --> fun()

如果条件为假:

dummy2 --> fun()

fun
两种情况的外部范围都是调用方加上调用方的调用方,依此类推。只需提及C语言既不允许嵌套函数也不允许动态作用域。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/380259.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号