作用域

✍ dations ◷ 2025-09-08 23:01:09 #计算机编程

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

相关

  • 非有神论非有神论(Nontheism),在现代西方的意思上,是指相对于有神论(特别是一神论)信仰的思维。无神论、不可知论都可以算做是其中一种非有神论的类别,一般是指无宗教信仰的人,但并非无神论
  • 罗伯特·柯尔小罗伯特·弗洛伊德·柯尔(Robert Floyd Curl, Jr.,1933年8月23日-),美国化学家。因发现富勒烯而与哈罗德·克罗托、理查德·斯莫利共同获得1996年的诺贝尔化学奖。目前是莱斯大
  • 皇家地理学会皇家地理学会(英语:Royal Geographical Society (with the Institute of British Geographers)是为促进地理学发展而于1830年在英国设立的一个学会。在地理学占有重要的位置。
  • 转录偶联修复核苷酸切除修复(nucleotide excision repair)是一种DNA修复方法。由于化学、辐射和很多其他因素的都会对DNA碱基对造成破坏,DNA时常需要修复。核苷酸切除修复是其中一种很重
  • 米沙鄢米沙鄢群岛(英语:Visayas、米沙鄢语:Kabisay-an)(又译为维萨亚斯群岛)位于菲律宾中部,是当地三大岛群之一。东邻菲律宾海,西邻苏禄海,北有吕宋岛,南有民答那峨岛,由数百个岛屿组成,最大
  • 圣马力诺犹太人犹太人,在中世纪已生活在圣马力诺。圣马力诺是意大利中部的内陆小国,犹太人在那里已生活了600年。第一次提及圣马力诺的犹太人是在14世纪后期,他们多是商人。虽然他们要穿有特
  • 乳清酸乳清酸(英语:Orotic acid,共轭碱作orotate)或嘧啶酸(pyrimidinecarboxylic acid)是一种杂环化合物,也是一种有机酸。乳清酸曾经被误以为是一种维生素B,并被称为vitamin B13,但后来发
  • 霍夫曼电量计霍夫曼电量计是一种用于水电解的设备,由奥古斯特·威廉·冯·霍夫曼(1818-1892)在1866年发明。它由三个连在一起的玻璃直筒构成。为方便添加水,内筒的顶并不是密封的。每个侧面
  • 松节酒松节酒(서울송절주)是一种用松节(新鲜的松树的树枝)、当归、牡丹花、松针和豨莶属植物来酿制的酒。这种酒有着强烈的药香,并据说对神经痛等有着良好的疗效。尽管对于首尔松节酒的
  • 耶拿分析仪器德国耶拿分析仪器股份公司(Analytik Jena AG)是总部在德国图林根州耶拿的公司,主要提供工业及科研用的分析、生物分析以其它光学设备。耶拿分析仪器成立于1990年,当时是一家分析