作用域

✍ dations ◷ 2025-11-28 03:10:03 #计算机编程

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

相关

  • 上流式厌氧污泥床上流式厌氧污泥床反应器(英文:Up-flow Anaerobic Sludge Blanket, UASB)是一种处理污水的厌氧生物方法,于1977年由荷兰Lettinga教授发明。污水自下而上通过UASB。反应器底部有一
  • 咸水湖咸水湖,或盐湖、盐水湖,是指以咸水形式积存在地表上的湖泊,一般湖水盐度大于3.5 %(海水)。由于水少有流出,蒸发量大,因而含盐量高,故名。多数位于内流河的末端。中国境内的咸水湖有
  • 靳辅靳辅(1633年-1692年),字紫垣。盛京辽阳人,隶汉军镶黄旗,清朝政治人物,以戮力治河而知名。靳辅生于明崇祯六年(1633年)。其祖先原是山东济南人,后于明朝初年从军戍卫,从此在辽阳落户。靳
  • 入侵波兰东部利沃夫 (9月17日至22日) – 威尔诺 (9月18日至19日) – 格罗德诺 (9月21日至24日) – 沙茨克 (9月28日) – Wytyczno (10月1日)波罗的海沿岸9月4日–10日北方战区
  • 奥拉西奥·卡尔特奥拉西奥·曼努埃尔·卡特斯·哈拉(西班牙语:Horacio Manuel Cartes Jara,1956年7月5日-)为巴拉圭政治家、拥有数家公司的企业家和体育活动领导人,前任巴拉圭总统。卡特斯的父亲为
  • 拉克雷森塔-蒙特罗斯91214 (拉克雷森塔) 91020 (蒙特罗斯)拉克雷森塔-蒙特罗斯(英语:La Crescenta-Montrose)是位于美国加利福尼亚州洛杉矶县的一个人口普查指定地区。拉克雷森塔-蒙特罗斯的座标为34
  • 增长核算成长会计(Growth Accounting)是经济学中解释经济成长的一套理论。一个经济中的国民总收入可以用多种要素建模来解释。在一个简单的模型中:这里,国民总收入的增长由资本的增长、
  • 世界参观人数最多的美术馆列表本表列出英国《艺术报》于2014年3月25日发布的2013年度世界参观人数最多的艺术博物馆(包括任何形式展出艺术品的博物馆)。名单中的100家博物馆共接待169,968,789人次参观,其中
  • MEGAMEGA是Mega Limited公司推出的一款云存储服务。于2013年1月19日在新西兰上线,该服务供应商广泛宣传其隐私性,所有文件在上传之前进行本地加密(英语:Client-side encryption),提供1
  • 电磁锁电磁锁,或称磁力锁(Magnetic lock),其设计和电磁铁一样,是利用电生磁的原理,当电流通过矽钢片时,电磁锁会产生强大的吸力紧紧的吸住吸附铁板达到锁门的效果。只要小小的电流电磁锁