作用域

✍ dations ◷ 2025-11-30 14:06:44 #计算机编程

在电脑程序设计中,作用域(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++是静态作用域语言,但在宏中用到的名字,也是动态作用域。

相关

  • 内胚层内胚层(Endoderm)是胚胎中最内的一胚层。在绘图中,内胚层传统上用黄色表示。它会形成以下器官的表皮:内胚层一词是源于:to enteron(希腊语)=肠,其实是“内”之意。to derma(希腊语)=皮内
  • 常备军常备军指一个国家或政权为了维持自身安全而设置的职业部队。不管是战时还是和平时期,常备军的最终目的都是保卫本国或本政权。
  • 胆骨化醇骨化三醇(英语:Calcitriol,又称为1,25-二羟胆钙化醇或1,25-二羟维生素D3)是维生素D的活性形式,也是体内的一种激素,在调节血钙与血磷浓度方面有着重要作用。7-脱氢胆固醇在皮肤内
  • 阳光地带太阳带(Sunbelt)是指美国南部北纬37度以南的地区,这些地区的日照时间较长。大致包括了以下地区。这些地区在过去农业发达,近年石油和电子产业快速发展。除了经济之外,在政治上也
  • 小兴安岭小兴安岭(Lesser Khingan Mountains),为中国黑龙江省北部的一条山脉,西北-东南走向,经过黑河、孙吴、伊春等县市。山脉长约400公里,山地低矮,多以丘陵为主,一般海拔600-1000米左右,最
  • 挪威森林猫Skogkatt 是挪威土语“森林猫”,因此纯种猫的品种中,挪威森林猫的土语便是“Norsk Skogkatt”,英语中有许多不同的俗称,如:Wegie,也称为 Skogkatt。根据 Fédération Internation
  • 经济剩余经济剩盈余是用于经济学的一种概念,可分为消费者盈余、生产者盈余,及两者加总形成的总盈余。消费者剩余(consumer surplus)是指购买者的支付意愿减去购买者的实际支付量。消费者
  • 071型综合登陆舰071型综合登陆舰(北约代号:Yuzhao-class)是中国人民解放军海军的一种大型船坞登陆舰,可作为气垫登陆艇的母船,用以运送士兵、步兵战车、主战坦克等展开登陆作战,也可搭载两栖车辆,
  • 潘金莲潘金莲是历史人物,河北清河人,武植之妻,善良贤惠,勤劳仁义,天生丽质,貌美手巧。后世文学作品对其进行歪曲,污蔑其为不守妇道、美艳放荡的淫妇;从而塑造成一个既聪明机变、美丽风流,又
  • 忍者理论Ninja Theory(有译为忍者理论)是一家位于英国剑桥的动作游戏开发工作室,最初在2000年3月建立时名为Just Add Monsters,公司后来由前Argonaut Games(英语:Argonaut Games) CEO Jez S