作用域

✍ dations ◷ 2025-07-26 20:01:53 #计算机编程

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

相关

  • 反义链(英语:Sense,也称股)在分子生物学中指一段核酸分子(如RNA与DNA)及其互补序列在指定氨基酸序列中的作用性质。例如,若RNA可以直接合成蛋白质,则该段RNA为正链;反之,若RNA需要先进行转
  • 中山区坐标:25°03′52″N 121°32′00″E / 25.0643611°N 121.533468°E / 25.0643611; 121.533468中山区位于中华民国台北市市中心偏北,此区因孙中山曾于中正区梅屋敷(今国父史迹
  • 和平与进步广播电台和平与进步广播电台(俄语:Мир и Прогресс)是一家苏联电台,1964年11月开始广播,苏联解体前后停播。名义上是一家由“苏联群众团体”主办的广播电台,实际是苏联官方的一
  • 贻贝科见内文贻贝科(学名:Mytilidae),也叫蜐、海虹、青口、红蛤,贻贝科,港澳台称为壳菜蛤科,干制品则被称作淡菜,是一种双壳类软体动物,壳黑褐色,肉米黄色至橘红色不等,生活在海滨岩石上。本
  • 会津八一会津八一(1881年8月1日 - 1956年11月21日)日本诗人、书法家与历史学家。会津八一出生于日本新潟县新潟市,为东京早稻田大学名誉教授,他的研究重点为日本飞鸟时代与奈良时代的佛
  • 第二次拉特朗公会议第二次拉特朗公会议是天主教教会承认的第十次大公会议,于公元1139年4月由教宗意诺增爵二世召开。由1000人参加,主要议题是减少教宗和诺理二世于1130年死后教宗选举选举出教宗
  • 刘镮之刘镮之(?-1821年),字信芳,清朝政治人物。山东诸城人,祖籍江南省砀山县(明弘治间始祖福公自南直隶砀山县迁山东诸城县)。刘统勋之孙,刘墉之侄。乾隆五十四年(1789年)进士,选翰林院庶吉士,散
  • 图像素养图像素养又称图像识读能力,也有翻译为视觉素养一词,源自英文的Visual Literacy,指个人对视觉影像的理解及运用能力,特别是对艺术品、电视及电影,拥有分析及鉴赏的能力。如同文字
  • A8公路A8公路、A8高速公路可以指:
  • 大王镇 (安新县)大王镇,是中华人民共和国河北省保定市安新县下辖的一个乡镇级行政单位。大王镇下辖以下地区:大王村、南六村、张六村、中六村、北六村、小王村、小王营村、于庄村、尹庄村、北