作用域

✍ dations ◷ 2025-04-26 22:49:16 #计算机编程

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

相关

  • 冶金冶金学(英语:metallurgy)属于材料科学,是研究从矿石中提取金属,并用各种加工方法制成具有一定性能的金属材料的学科。冶金学也研究金属、金属互化物或其混合物(称为合金)的物理及化
  • 台北水道水源地台北水道水源地位于台湾台北市中正区思源街1号,国立台湾大学水源校区对面,原为中华民国三级古迹“台北水源地唧筒室”,2002年2月5日公告更名,并将观音山蓄水池、量水室、浑水抽
  • 1008年
  • 回形针行动回形针行动(英语:Operation Paperclip,1949-1990)是第二次世界大战末期,美国战略情报局把超过1600名的原纳粹德国科学家,工程师,和技师秘密引进到美国的一个行动。这些科学家包括当
  • 丁文江丁文江(1887年3月20日-1936年1月5日),字在君,江苏泰兴人,中华民国地质学家、社会活动家,曾任私立南开大学校董会董事。丁文江出身富绅,1902年留学日本,期间读到吴稚晖的文章,宣传在苏
  • 郕叔武郕叔武(?-?),即成叔武,为周朝诸侯国郕国开国君主,他为周文王的第七子,周武王的弟弟,同母兄弟十人:伯邑考、周武王、管叔鲜、周公旦、蔡叔度、曹叔振铎、郕叔武、霍叔处、卫康叔、冉季载
  • 乔黛尔·弗兰乔黛尔·米卡·弗兰(英语:Jodelle Micah Ferland,1994年10月9日-)是一位加拿大女演员。曾在2004年美国广播公司系列节目《王国医院(英语:Kingdom Hospital)》中扮演玛丽·詹森,于2010
  • 伊凡卡·川普伊凡娜·玛丽·“伊万卡”·特朗普(英语:Ivana Marie "Ivanka" Trump,1981年10月30日-)是名美国商人、电视名人、名媛、作家和模特儿,现任特朗普集团执行副总裁及白宫总统顾问,是名
  • 邹炳泰邹炳泰(?-1820年),字仲文,江苏无锡人。清朝乾隆、嘉庆年间政治人物。邹炳泰于乾隆三十七年(1772年)成二甲进士,选庶吉士,散馆授编修,参与纂修《四库全书》,迁国子监司业。清代国子监仍在
  • 秋山祥子秋山 祥子(1989年11月22日-)日本神奈川县出身的AV女优。出道成为AV女优前在花店工作。2009年7月正式出道,并在同年10月成为h.m.p専属女优。2010年12月表明停止AV女优活动并宣布