作用域

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

相关

  • 米索前列醇米索前列醇(Misoprostol),常见商品名为Cytotec,是一种人工合成的PGE1药物。用于加速分娩、流产、预防或治疗胃溃疡,或治疗因为子宫收缩不足所造成的产后出血。 如果用于流产,常常
  • 特纳县特纳县(Turner County, Georgia)是美国乔治亚州南部的一个县。面积751平方公里。根据美国2000年人口普查,共有人口9,504人。县治阿什本 (Ashburn)。成立于1905年8月18日。县名
  • 文理中学文理中学(德语:Gymnasium),部分地区也称lyzeum,是中等学校教育体系中的一种为进入大学准备的学校。何时进入这种学校,以及这种学校的学习时长,依不同的教育体制而有所区别。在德语
  • NexonNEXON(韩语:넥슨;中文:纳克森)是一家韩国电脑游戏股控公司。于1994年12月成立于韩国总部曾设于首尔,在2011年12月以控股公司方式,搬移运营总部至东京,实际控制权转移至济州岛的NXC公
  • 马来酸马来酸(maleic acid),即顺丁烯二酸,化学式为 HO2CCHCHCO2H,是一种二羧酸,即一个含有两个羧酸官能基的有机化合物。马来酸和富马酸(反丁烯二酸)互为顺反异构物。马来酸常用来制备富马
  • 巴恩斯特布尔 (马萨诸塞州)巴恩斯特布尔(英语:Barnstable)位于美国马萨诸塞州东南部科德角,是巴恩斯特布尔县的县治所在,面积197.5平方公里。根据2000年美国人口普查,共有47,821人,其中白人占91.85%、非裔美
  • 马克斯韦尔·T·马斯特斯马克斯韦尔·蒂尔登·马斯特斯(Maxwell Tylden Masters,1833年4月15日-1907年5月30日),英国植物学家、生物分类学家,以研究蔬菜畸形学而闻名。
  • 斯琴格日乐斯琴格日乐(蒙古语:.mw-parser-output .font-mong{font-family:"Menk Hawang Tig","Menk Qagan Tig","Menk Garqag Tig","Menk Har_a Tig","Menk Scnin Tig","Oyun Gurban Ulu
  • 刘晏含刘晏含(1993年1月19日-),辽宁盘锦人,中国女子排球运动员,身高1米88,司职主攻,亦为中国国家女子排球队成员。效力于八一深圳女排。2012-2013赛季中国女排联赛,刘晏含成为八一女排最主
  • 澳大利亚惩戒系统澳大利亚的监狱系统是澳大利亚的刑事司法系统的一部分。2014年,澳大利亚51%的囚犯是因暴力犯罪定罪的。 在澳大利亚,在州法庭或联邦法庭上被定罪的罪犯会被送至监狱,安全级别由