作用域

✍ dations ◷ 2025-10-21 08:58:54 #计算机编程

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

相关

  • 美国环保局美国国家环境保护署(英语:Environmental Protection Agency,缩写:EPA),简称美国环保署,是美国联邦政府一个独立行政机构,负责维护自然环境与保护人类健康不受环境危害及污染影响。EP
  • 生物物理经济学热经济学(英语:Thermoeconomics),也被称为生物物理经济学(英语:Biophysical economics),是一种非主流经济学,它把热力学定律应用到经济理论中来。术语“热经济学”是由美国工程师梅伦
  • 悬浮微粒灰尘由固体物质的细小颗粒组成。在地球上,它通常由大气中的悬浮微粒组成,这些颗粒来自各种来源,例如土壤、因风蚀而被风带走的尘埃、火山爆发和其他空气污染。房屋、办公室和其
  • 微调的宇宙微调的宇宙(Fine-tuned Universe)主张使得宇宙中存在生命的条件只能是某些普遍的无维度物理常数维持在非常窄的数值区间,如果任何基本参数发生了哪怕少许改变,宇宙中就将无法形
  • 张巡张巡(709年-757年),字巡,又称张中丞,蒲州河东或邓州南阳人,唐朝县令。天宝十五年(755年),安史之乱中,张巡在以真源(今安徽亳州西)县令的身份,起兵守雍丘(今河南杞县),抵抗安史之乱的燕军,至德
  • 铭印铭印,又称印记、印迹、印随或印痕。在行为生物学中指的是一种不可逆的学习模式:通常在一段比较短的,由基因决定的时期里(敏感时期),环境的刺激会被长久地植入个体的行为中,后来看来
  • 白雪岑白雪岑(5月16日-),原名白雪,中国女配音演员。毕业于北京电影学院表演系02级高职配音班,与演员黄渤,配音演员边江、邱秋等是同班同学。代表作有电视剧《雪山飞狐》的程灵素、《老九
  • 苏门答腊犀 Buckland, 1872 Fischer, 1814 Groves, 1965苏门答腊犀(学名:)简称 苏门犀,是 双角犀属 的唯一物种,现存体型最小的犀牛。肩高约 1.3 米,体长约 2.4-3.2 米,体重约 700 千克。苏门
  • 2020中国好声音《中国好声音》是一档中国电视音乐选秀节目,2020年度节目预计从2020年8月24日至2020年11月13日播出。本年度节目的导师为谢霆锋、李健和李荣浩,主持人为华少和伊一。该节目附
  • 平衡树平衡树是计算机科学中的一类数据结构,为改进的二叉查找树。一般的二叉查找树的查询复杂度取决于目标结点到树根的距离(即深度),因此当结点的深度普遍较大时,查询的均摊复杂度会上