作用域

✍ dations ◷ 2025-05-17 21:38:04 #计算机编程

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

相关

  • 骷髅之舞《骷髅之舞》(法语:Danse Macabre),作品40,又名《死之舞》,是法国作曲家圣桑的管弦乐作品。此曲本源自1872年的一首艺术歌曲,1874年将原曲改成为管弦乐作品,并于1875年1月24日于巴黎
  • 澳门大学列表澳门大学列表列出澳门10所高等院校,当中4所为公立,6所为私立。
  • 超级适居行星超级适居行星(Superhabitable planet)是指比地球更适合生命起源与演化的一类假设存在的太阳系外行星或系外卫星。这项概念是在2014年由天文学家雷内·海勒(René Heller)与约翰
  • 印第安人迁移政策印第安人迁移政策是美国政府19世纪的一个政策,该政策把密西西比河以东的印第安人强制迁移到密西西比河以西。受影响的印第安人民族包括文明化五部族的奇克索人、切罗基人、乔
  • 黄大城新竹高中黄大城(1954年12月19日-2008年11月24日),台湾歌手,曾和王梦麟、赵树海组成MIB三重唱,毕业于新竹高中、国立政治大学民族社会学系,毕业后在民航局上班。1978年,以云南民谣弥
  • 搜狐畅游北京畅游时代数码技术有限公司(简称:畅游、搜狐畅游)是一家位于中国北京的在线游戏开发商和运营商,于2009年4月在纳斯达克全球精选市场上市。
  • 雪城雪城可以指:
  • 全球最高电影票房全球最高电影票房是在全球上映的电影票房等相关列表。数字只包含影院票房收入,不包含其他营利方式的收入,(如光盘租售、电视播映等)。票房以美元为单位。更新日期:2020年3月25日
  • 十腕总目十腕总目(学名:Decapodiformes),俗称“乌贼”,古称乌鲗,是一种头足纲蛸亚纲新蛸下纲之下的一类软体动物,所有乌贼都可以喷墨。乌贼类可以大致概括本类多数动物。与蛸亚纲的其他分类
  • 塞拉尼斯塞拉尼斯公司(Celanese Corporation,或Hoechst Celanese)是一家总部位于美国德克萨斯州欧文的化工公司,为财富美国500强公司之一。它是世界上主要的乙酰基产品生产商之一,此外也