作用域

✍ dations ◷ 2025-02-23 22:24: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++是静态作用域语言,但在宏中用到的名字,也是动态作用域。

相关

  • 东岸美国东岸,或称为大西洋海岸,是指美国的最东部的海岸地区,东向面临大西洋,北边为加拿大,南边为墨西哥湾。此区域通常包括以前北美十三殖民地的范围,现在则由北到南包括缅因州、新罕
  • 马利肯罗伯特·桑德森·马利肯(英语:Robert Sanderson Mulliken,1896年6月7日-1986年10月31日),美国物理学家、化学家。因其对于分子轨道理论的贡献,1963年获彼得·德拜奖,1966年获诺贝尔
  • span class=nowrapBeSOsub4/sub/span硫酸铍是一种无机化合物,化学式为BeSO4,它通常以四水合物SO4的形式存在,为无色晶体。硫酸铍最早于1815年被永斯·贝采利乌斯发现。 硫酸铍易溶于水,微溶于浓硫酸。硫酸铍可以由
  • 安平蚵灰窑暨附属建筑安平蚵灰窑暨附属建筑位于台湾台南市安平区,可能是台湾仅存的蚵灰窑,2006年8月7日台南市政府公告为市定古迹,后改为直辖市定古迹。窑体本身的建筑年代不明,但已有数十年以上的历
  • 色谱法期刊A《色谱法期刊A》(,常缩写为 )是分析化学领域的学术期刊。色谱法期刊A为周刊,创刊于1958年,主要为发表分离与化合物鉴定的技术与方法,包括色谱法、电迁移技术(如电泳、电色谱)、样品
  • 气象厅 (日本)气象厅(日语:気象庁/きしょうちょう ,Japan Meteorological Agency,JMA)是日本国土交通省辖下的外局之一(国土交通省设置法(日语:国土交通省設置法)第46条),根据《气象业务法》成立,负责
  • 四苯基乙烯四苯基乙烯是一种可以在建筑construction of what?以及医疗设备、包装和电器的制造中使用的化合物。四苯基乙烯可以由二苯二氯甲烷为原料,经金属还原而合成。也可由二苯酮经
  • 皇家普鲁士皇家普鲁士(波兰语:Prusy Królewskie;德语:Königlich-Preußen;又译为王室普鲁士),或称波属普鲁士(波兰语:Prusy Polskie;德语:Polnisch-Preußen),是波兰立陶宛联邦从条顿骑士团国获得
  • Head Above WaterHead Above Water可指:
  • 哥德尔奖哥德尔奖(英语:Gödel Prize)由欧洲理论计算机学会(EATCS)与美国计算机学会基础理论专业组织(ACM SIGACT)于1993年共同设立。哥德尔奖颁发给理论计算机领域最杰出的学术论文。其名