作用域

✍ dations ◷ 2025-11-28 14:33:46 #计算机编程

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

相关

  • 心血管循环系统(英语:circulatory system),也称为心血管系统(英语:cardiovascular system)或血管系统(英语:vascular system)是负责血液循环,在细胞间传送养分(如氨基酸及电解质)、氧气、二氧化
  • 澳大利亚民主党澳大利亚民主党(Australian Democrats)是澳大利亚的政党。澳大利亚民主党1977年建党,由原有的两个小党合并,加上部分从日趋保守主义的澳大利亚自由党退党的倾向于古典自由主义的
  • 詹启贤詹启贤(1948年7月9日-),中国国民党籍政治人物,彰化员林人,现任国光生技董事长,曾任中国国民党首席副主席、卫生署署长、228事件纪念基金会董事长。詹启贤出生于彰化县员林市的医生
  • 杉木属杉木属(学名:)是柏科下的一个属,为常绿乔木植物。该属现存有杉木()一种,与其的变种台湾杉木( var. ),分布于越南和中国秦岭以南及台湾。
  • 何木火何木火(1958年-)字世怀,号水墨行者,台湾台中市大里区人,是国内外知名国画大师。其三叔何金旺在日治时代是其村内有名的肖像画家,何木火在他教导下展现绘画天分。他曾计划于国中毕业
  • 努比亚长颈鹿北部长颈鹿(学名:),是4种长颈鹿中的一种,斑点呈四方形,栗色;底色为白色。腿内侧及上肢以下无斑点。分布苏丹东部及刚果东北部。种加词为,源于早期罗马帝国时期人们给它起的名字,意思
  • 2008青宁心曲《2008青宁心曲》是台湾客家歌手徐筱宁的第2张录音室专辑,由銮克勇制作,吉声影视音制作发行。此专辑共收录10首歌曲,皆使用客语演唱。吉声影视音有意打造徐筱宁为现代曲风的客
  • FashionGuideFashionGuide是台湾的一个时尚美妆网站,由风尚数位科技股份有限公司经营。FashionGuide系由谢攸升、张伦维等人于1997年所创立,是以讨论区的形式经营社群,并且拥有大量的时尚美
  • 下妻贵宽下妻贵宽(日语:下妻 貴寛/しもつま たかひろ ,1994年4月15日-)是一名出身于日本山形县酒田市的棒球选手,司职捕手,目前效力于日本职棒东北乐天金鹫。26 渡边直人 | 73 野村克则 | 7
  • 环形缓冲器圆形缓冲区(circular buffer),也称作圆形队列(circular queue),循环缓冲区(cyclic buffer),环形缓冲区(ring buffer),是一种用于表示一个固定尺寸、头尾相连的缓冲区的数据结构,适合缓存