作用域如何与变量声明、初始化和赋值交互?根据我迄今所了解到的情况,这些术语的定义如下:
我不知道的是范围与宣言和任务是如何相互作用的。虽然变量的作用域似乎完全基于声明它的代码块,但我不知道赋值是如何与作用域交互的。例如:
public class exampleClass
{
public static void main(String[] args) // using java for example
{
int x = 5; // x is declared here, and initialised with a value of 5
for (int i = 0; i < 10; i++) // i is declared and initialised here
{
x = i; // x is assigned the value of i each iteration
} // i goes out of scope here
System.out.println(x); // the value of x is printed
} // x goes out of scope here
}在这个例子中,x是声明和初始化的(我们只是说初始化吗?)在主要的方法中,并且是在范围内的那个方法。但是,在while循环中为x分配了一个值。执行此代码时将打印什么,但更重要的是为什么?它是打印"5“还是"9"?
我见过代码抛出编译器异常,因为语法意味着x应该打印5。然而,当我运行这个示例代码时,我得到了"9“。
最后一个问题是,为什么可以内联地声明和初始化多个变量:
int x = 1, y = 4, z = 6;但是变量不能内联地分配:
x = 1, y = 4, z = 6;发布于 2016-03-04 14:27:50
声明和初始化之间的区别可能是模糊的;有些语言清楚地区分了这些操作,而在另一些语言中,初始化就是声明。如果在声明变量时初始化了它,那么您将其命名为什么并不重要。
但是,在while循环中为x分配了一个值。执行此代码时将打印什么,但更重要的是为什么?它是打印"5“还是"9"?
9,因为这是在打印之前分配给它的最后一个值。
作用域:变量的“生存期”,一个变量在作用域中直到代码块结束,此时用来存储该变量的内存将被释放。实际上,当代码块结束时,变量将被删除或“终止”。
是也不是。范围在特定变量的代码中定义可用的部分。不同的语言对其作用域规则可以有非常不同的定义。当变量超出作用域时,当没有任何代码可以进一步访问时,通常是垃圾收集(在适用的语言中)。在一个简单的函数块中,当函数结束时会发生这种情况。
但是,请参见这个Javascript示例:
function foo() {
var bar = 'baz';
return function () {
alert(bar);
};
}从该函数返回的内部函数仍然保持对bar的引用。即使foo结束,bar也被闭锁关闭,并且仍然在内部函数的作用域内。只要对返回函数的引用存在,bar仍然存在。
https://stackoverflow.com/questions/35764650
复制相似问题