作用域

✍ dations ◷ 2025-11-28 21:11:01 #计算机编程

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

相关

  • 印刷机印刷机是一种把着墨面压在媒体面(如纸和布料)的机械装置,以此来成像。最早由德国人古腾堡于1440年发明。印刷机是印刷文字和图像的机器。现代印刷机一般由装版、涂墨、压印、输
  • 深圳会展中心深圳会展中心为深圳市最大的单体建筑,坐落于福田区,占地22万平方米,总建筑面积28万平方米,地上6层,地下2层,室内展览面积达105,000平方米,可容纳5000国际标准展位,会议室共35间。自2
  • 霍梅尼赛义德鲁霍拉·穆斯塔法维·穆萨维·霍梅尼(波斯语:سید روحاللّه مصطفوی موسوی خمینی‬‎,转写:Sayyid Rūhollāh Musavi Khomeinī  发音 帮助·
  • 秘鲁水獭(L. felina)秘鲁水獭(Lontra felina),又名猫獭,是一种很稀少的水獭。它们是南美洲中最多栖于海上的水獭,甚至很少到淡水或海口的地方。秘鲁水獭分布在南美洲西南部的滨海带。秘鲁南部、智利
  • 夏季奥林匹克运动会皮划艇比赛皮划艇自1936年柏林夏季奥运会起成为每届夏季奥运会比赛项目。 奥运会皮划艇比赛分皮划艇激流和皮划艇静水两类:比赛中使用两种船:一人或两人的划艇(canoe)和一人、两人或四人的
  • 也迪古也迪古(1352年-1419年),白帐汗国曼吉特部首领。他也曾参与建立诺盖汗国。阿拉伯作家伊本.阿拉伯沙说他是汗国宫廷侍卫长。他来自克里米亚曼吉特人,他父亲1378年被脱脱迷失杀害。
  • 窦偁窦偁(925年-982年),字日章,宋朝初年蓟州渔阳县(今天津市蓟州区)人。窦禹钧的儿子,窦仪之弟,宋太宗时参知政事。后汉乾祐二年(949年)窦偁中进士。后周广顺初年,补单州(治所在今山东省单县)
  • 拉玛克里斯纳拉玛克里斯纳,或译罗摩奎师那、罗摩克里希那(本篇均简称拉玛,孟加拉语: রামকৃষ্ণ পরমহংস, 帮助·信息,1836年2月18日-1886年8月16日),原名Gadadhar Chatterji或Gadadh
  • 新田站 (宫城县)新田站(日语:新田駅/にったえき  */?)是一由东日本旅客铁道(JR东日本)的所经营铁路车站,位于日本宫城县登米市迫町字新田字狼之欠(狼の欠)。新田是JR东北本线沿线的一个车站,属JR东
  • Kdegraphicskdegraphics — 一个提供图像处理相关工具的软件包。 Akonadi · Decibel · Flake · KConfig XT · KJS · KDOM · KHTML · KIO · Kiosk · KIPI · KParts ·