关于Java变量的作用域分析
目录
1.静态作用域与动态作用域
2.变量的作用域
3.Java 中变量的作用域
4.Java 欺骗作用域
5.Java 执行上下文
6.Java 中的作用域链
7.Java 中的闭包
8.Java 中的模块
一
静态作用域与动态作用域
在电脑程序设计中,作用域(scope,或译作有效范围)是名字(name)与实体(entity)的绑定(binding)保持有效的那部分计算机程序。不同的编程语言可能有不同的作用域和名字解析。而同一语言内也可能存在多种作用域,随实体的类型变化而不同。作用域类别影响变量的绑定方式,根据语言使用静态作用域还是动态作用域变量的取值可能会有不同的结果。
包含标识符的宣告或定义;
包含语句和/或表达式,定义或部分关于可运行的算法;
嵌套嵌套或被嵌套嵌套。
名字空间是一种作用域,使用作用域的封装性质去逻辑上组群起关相的众识别子于单一识别子之下。因此,作用域可以影响这些内容的名字解析。
程序员常会缩进他们的源代码中的作用域,改善可读性。
作用域又分为两种,静态作用域和动态作用域。
静态作用域又叫做词法作用域,采用词法作用域的变量叫词法变量。词法变量有一个在编译时静态确定的作用域。词法变量的作用域可以是一个函数或一段代码,该变量在这段代码区域内可见(visibility);在这段区域以外该变量不可见(或无法访问)。词法作用域里,取变量的值时,会检查函数定义时的文本环境,捕捉函数定义时对该变量的绑定。
function f() {
function g() {
}
}
静态(词法)作用域,就是可以无须执行程序而只从程序源码的角度,就可以看出程序是如何工作的。从上面的例子中可以肯定,函数 g 是被函数 f 包围在内部。
大多数现在程序设计语言都是采用静态作用域规则,如C/C++、C#、Python、Java、Java……
相反,采用动态作用域的变量叫做动态变量。只要程序正在执行定义了动态变量的代码段,那么在这段时间内,该变量一直存在;代码段执行结束,该变量便消失。这意味着如果有个函数f,里面调用了函数g,那么在执行g的时候,f里的所有局部变量都会被g访问到。而在静态作用域的情况下,g不能访问f的变量。动态作用域里,取变量的值时,会由内向外逐层检查函数的调用链,并打印第一次遇到的那个绑定的值。显然,最外层的绑定即是全局状态下的那个值。
非常好我支持^.^
(0) 0%
不好我反对
(0) 0%