范围如何与变量声明,初始化和赋值相互作用?根据我迄今所学的内容对这些术语的定义如下:
声明:说明变量的类型,以及它的名称/标识符。变量必须在分配或读取之前声明。
赋值:抛弃变量的现有值并用新值替换它,旧值在赋值语句的末尾被抛弃,因此值可以递增或以其他方式调整,例如:x = x + y;
初始化:用于第一次赋值变量的名称,在初始化之前,变量具有默认值,对于对象,这些对象具有空值。初始化可以与声明一起完成。
范围:变量的“生命周期”,变量在范围内,直到代码块结束,此时用于存储该变量的内存被释放。实际上,当代码块结束时,该变量将被删除或“终止”。
我不知道范围是如何与宣言和作业相互作用的。虽然变量的范围似乎完全基于声明它的代码块,但我不知道赋值如何与范围交互。例如:
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在main方法中声明并初始化(我们只是说初始化了吗?),并且在该方法的范围内。但是,在while循环中为x分配了一个值。执行此代码时将打印什么,但更重要的是为什么?它会打印“5”还是“9”?
我看到代码抛出编译器异常,因为语法暗示x应该打印5.但是当我运行这个示例代码时,我得到“9”。
最后一个问题,为什么可以内联声明和初始化多个变量:
int x = 1, y = 4, z = 6;
但不能内联分配变量:
x = 1, y = 4, z = 6;
答案 0 :(得分:0)
声明和初始化之间的区别可能很模糊;有些语言明确区分了这些行为,在其他语言中,初始化就是声明。如果变量在声明时被初始化,那么你调用它并不重要。
但是,在while循环中为x分配了一个值。执行此代码时将打印什么,但更重要的是为什么?它会打印“5”还是“9”?
9,因为这是在打印之前分配给它的最后一个值。
范围:变量的“生命周期”,变量在范围内,直到代码块结束,此时用于存储该变量的内存被释放。实际上,当代码块结束时,该变量将被删除或“终止”。
是和否。范围定义了特定变量可用的代码部分。不同的语言可以对其范围规则有不同的定义。当变量超出范围时,变量通常是垃圾收集(在适用的语言中),当没有任何代码进一步访问它时。在一个简单的功能块中,当函数结束时会发生这种情况。
但是,请参阅此Javascript示例:
function foo() {
var bar = 'baz';
return function () {
alert(bar);
};
}
从此函数返回的内部函数仍保留对bar
的引用。即使foo
结束,bar
正由<{3}} 关闭,但仍在内部函数范围内。只要存在对返回函数的引用,bar
仍然存在。