作用域

✍ dations ◷ 2025-06-08 13:51:34 #计算机编程

在电脑程序设计中,作用域(scope,或译作有效范围)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。不同的编程语言可能有不同的作用域和名字解析。而同一语言内也可能存在多种作用域,随实体的类型变化而不同。作用域类别影响变量的绑定方式,根据语言使用静态作用域还是动态作用域变量的取值可能会有不同的结果。

名字空间是一种作用域,使用作用域的封装性质去逻辑上组群起关相的众识别子于单一识别子之下。因此,作用域可以影响这些内容的名字解析。

程序员常会缩进他们的源代码中的作用域,改善可读性。

下列例子显示了C++语言中多种不同的作用域声明:

namespace N{                        // 命名空间作用域,仅是群组织别名   class C   {                     // 类作用域,定义/声明成员变量和函数      void f (bool b)      {                  // 函数作用域,包含可执行语句         if (b)         {               // 条件执行语句的无名作用域           ...         }      }   };}

静态作用域与动态作用域

静态作用域又叫做词法作用域,采用词法作用域的变量叫词法变量。词法变量有一个在编译时静态确定的作用域。词法变量的作用域可以是一个函数或一段代码,该变量在这段代码区域内可见(visibility);在这段区域以外该变量不可见(或无法访问)。词法作用域里,取变量的值时,会检查函数定义时的文本环境,捕捉函数定义时对该变量的绑定。

大多数现在程序设计语言都是采用静态作用域规则,如C/C++、C#、Python、Java、JavaScript……

相反,采用动态作用域的变量叫做动态变量。只要程序正在执行定义了动态变量的代码段,那么在这段时间内,该变量一直存在;代码段执行结束,该变量便消失。这意味着如果有个函数f,里面调用了函数g,那么在执行g的时候,f里的所有局部变量都会被g访问到。而在静态作用域的情况下,g不能访问f的变量。动态作用域里,取变量的值时,会由内向外逐层检查函数的调用链,并打印第一次遇到的那个绑定的值。显然,最外层的绑定即是全局状态下的那个值。

采用动态作用域的语言有Pascal、Emacs Lisp、Common Lisp(兼有静态作用域)、Perl(兼有静态作用域)。C/C++是静态作用域语言,但在宏中用到的名字,也是动态作用域。

相关

  • 蜜月旅游度蜜月,又称为蜜月旅行,是新婚夫妻一起到某一个地方所度过的休闲时光。蜜月旅行的要点,在于行程浪漫之余,亦不失个人的空间。因此,若非必要而要参加旅行团的话,也希望观光的地点能
  • 伊凡四世伊凡四世·瓦西里耶维奇(俄语:Иван IV Васильевич,1530年8月25日-1584年3月18日),又被称为伊凡雷帝(俄语:Иван Грозный),俄罗斯沙皇国的开创者。留里克王朝
  • 种 康种康(1962年4月-),陕西省合阳人,中国植物生理学家,中国科学院植物研究所研究员。2017年当选为中国科学院院士。1984年毕业于兰州大学生物系获学士学位,1988和1993年先后获得兰州大
  • 绿地率绿地率是一定范围内(例如一个城市、一个社区或一块建设用地)的绿地占比的一种城市规划指标,其具体定义、计算方法因地区而异。中华人民共和国国家标准《民用建筑设计统一标准》
  • 合弓类动物合弓纲(Synapsida)意为“固定的颧弓”,也被称成兽形纲(Theropsida),是羊膜动物的一纲,包含羊膜动物中所有与哺乳类关系较近的物种。合弓纲是羊膜动物的两个主要演化支之一,另一个演
  • 微型摄影术微型摄影术(英语:Subminiature photography)是用微型相机拍摄相片的技术。微型摄影术以胶卷底片的类别界定,凡底片小于35毫米、大于2毫米直径的摄影术,称为微型摄影术,底片小于2毫
  • 载具载具指载运工具,也称交通工具,是指使用于人或货物运输的设备。本身不产生位移的传送带或非人造的某些水面漂浮物都不能称为“载具”。为上述目的以人的意志为驱使的动物和人本
  • 巴图塔站巴图塔站是位于内蒙古自治区鄂尔多斯市伊金霍洛旗巴图塔的一个铁路车站,邮政编码17205。车站建于1989年,有包神铁路经过该站,现仅办理货运,不办理客运业务。车站距离包头东站154
  • 亨利王子 (帕尔马)恩里克·卡洛·路易吉·乔治(意大利语:Enrico Carlo Luigi Giorgio;1851年2月12日-1905年4月14日),出生于帕尔马。巴迪伯爵,是波旁王室成员,是帕尔马及皮亚琴察公爵卡洛三世的次子。
  • 勒密乌斯·帕莱蒙勒密乌斯·帕莱蒙(英语:Remmius Palaemon)。约活动于公元1世纪前后。曾在罗马为奴,后成为著名的文法学家和教师。曾被尤文纳尔所提及,马提亚尔亦曾提及过他的著作。他还著有一部