作用域

✍ dations ◷ 2025-07-06 02:18:18 #计算机编程

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

相关

  • 锉刀锉刀是一种用于从工件上去除微量材料的工具。在木工、金属加工和其他类似的贸易和爱好工作中很常见。锉刀大多数是手工工具,由矩形,正方形,三角形或圆形横截面的表面硬化钢筋制
  • 铝合金铝合金通常使用铜、锌、锰、硅、镁等合金元素,20世纪初由德国人Alfred Wilm发明,对飞机发展帮助极大,第一次大战后德国铝合金成分被列为国家机密。跟普通的碳钢相比有更轻及耐
  • 抗原原罪抗原原罪(英文:original antigenic sin),又称霍斯金现象(Hoskins effect), 是指身体免疫系统在遭遇到与初次感染有些微不同的外来物(如:病毒或细菌)时,倾向利用初次产生的免疫记
  • 选择性血清素抑制剂选择性5-羟色胺再摄取抑制剂(英语:Selective Serotonin Reuptake Inhibitors)(SSRIs),也称选择性血清素再摄取抑制剂,是一类常用的抗抑郁药,自20世纪80年代后期开始用来治疗抑郁症
  • 登封登封市是中华人民共和国河南省郑州市下辖的一个县级市,登封之名由武周女皇帝武则天所封。位于河南省中部偏西,地处嵩山南麓,东北临省会郑州,西北靠古都洛阳。辖域东西长约56公里
  • 山城区山城区是中华人民共和国河南省鹤壁市的一个市辖区。面积176平方公里,2002年人口24万。邮政编码458030。目前下辖:红旗街道、山城路街道、鹿楼街道、汤河桥街道、长风中路街道;
  • 孙家湾组孙家湾组是位于中国辽宁阜新、义县、锦州、北票一带以及内蒙古东部的上白垩世地层,1939年由森田义人命名。该地层以灰紫(局部灰黄)色复成分砾岩为主,间夹杂色砂岩、粉砂岩、砂质
  • 关兴关兴(约193-约234),字安国,三国时期蜀汉官吏。关兴是关羽之子,在关羽死后继承了汉寿亭侯的爵位。关兴年少时就有名声,风评颇高,诸葛亮对他十分器重。弱冠后,曾担任侍中、中监军,可惜数
  • 古矢彻古矢彻(ふるや とおる、1958年12月23日 - )是一位出身于日本东京都秋川市(现秋留野市)的总编辑、作家、评论家。东京都立国分寺高等学校、上智大学文学部新闻学科毕业。现在担任
  • 绿玻陨石绿玻陨石(英语:Moldavite,Vltavín),又称为捷克陨石,是一种橄榄绿色或暗绿色的玻璃陨石,可能由德国南部的陨石撞击(英语:Nördlinger Ries)形成 ,形成时间约为1500万年前。