作用域

✍ dations ◷ 2025-12-01 04:05:50 #计算机编程

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

相关

  • 太平御览《太平御览》初名《太平类编》、《太平编类》,后改名为《太平御览》。是北宋时期编写的一部类书,是保存了五代以前文献最多的一部类书。《太平御览》与《太平广记》、《 文苑
  • 安默西林阿莫西林(amoxicillin),又译安莫西林或安默西林,本名羟氨苄青霉素,是一种常用的口服性广谱β-内酰胺类抗生素,具溶菌作用,主治易感微生物所引起的细菌性感染。本品为治疗中耳炎的第
  • 充分就业充分就业(英语:Full employment),也称作完全就业,意即想要工作的人都可以工作足够长的时间以获得一份合理的薪水。由于人们换工作等原因,充分就业与一定的失业率并存。在就业不足(
  • 腾讯云腾讯云(英语:Tencent Cloud;又称:腾讯云计算),是腾讯推出的云端运算服务,发布全球云服务版图,构建覆盖全球的数据中心节点,在更多地区跟全球的合作伙伴共同构建,为中国出海企业以及海
  • 谢芳谢芳(1935年-),原名谢怀复,原籍湖南益阳,生于湖北黄陂,后迁居上海,中国话剧、歌剧、戏曲、电影及电视剧演员。1951年毕业于汉口罗以女子中学,随后考入中南文工团音乐部,任歌剧演员。19
  • 商业条款宪法正文I ∙ II ∙ III ∙ IV ∙ V ∙ VI ∙ VII其它修正案 XI ∙ XII ∙ XIII ∙ XIV ∙ XV XVI ∙ XVII ∙ XVIII ∙ XIX ∙ XX XXI ∙ XXII ∙ XXIII ∙
  • 氯酸铁氯酸铁是一种无机化合物,化学式为Fe(ClO3)3。它可由氯酸铵水溶液和氢氧化铁的反应制得。氯酸铁易溶于水,形成红黄色溶液。其碱式盐难溶于水。
  • 玛家乡坐标:22°42′31″N 120°38′58″E / 22.7086763°N 120.6494041°E / 22.7086763; 120.6494041玛家乡(排湾语:Makazayazaya)位于台湾屏东县东北方,北临三地门乡,东侧和北侧连雾
  • 亚历山大·伊万诺维奇·乌斯宾斯基亚历山大·伊万诺维奇·乌斯宾斯基(俄语:Алекса́ндр Ива́нович Успе́нский,1902年2月27日-1940年1月27日)是西西伯利亚地区内务人民委员部副部长、
  • 高句丽与倭的战争高句丽与倭的战争发生在4世纪末5世纪初。此次战争高句丽击败倭国与百济联军,并使新罗、百济成为高句丽的藩属国。391年,高句丽从海上击败百济。396年高句丽好太王拿下百济众多