编程基础:全局变量和局部变量
外观
全局变量 - 在程序开始时声明,其全局作用域意味着它可以在程序中的任何过程或子程序中使用
很少建议使用全局变量,因为它们容易导致错误,浪费内存,并且在跟踪代码时难以理解。如果您声明一个全局变量,它将在程序运行时继续使用内存,即使您不再需要/使用它。
局部变量 - 在子程序或编程块中声明,其局部作用域意味着它们只能在声明它们的子程序或程序块中使用
局部变量在有限的范围内初始化,这意味着它们在调用函数或子程序时声明,并且函数结束后,变量占用的内存将被释放。这与全局变量形成对比,全局变量不会释放内存。
看看这个例子
Module Glocals
Dim number1 as integer = 123
Sub Main()
console.writeline(number1)
printLocalNumber()
printGlobalNumber()
End Sub
Sub printLocalNumber
Dim number1 as integer = 234
console.writeline(number1)
End Sub
Sub printGlobalNumber
console.writeline(number1)
End Sub
End Module
输出会是什么?
代码输出
123
234
123
为什么是这样? 好像我们有两个版本的变量 number1。
- 第一个版本在第 2 行声明,它不在任何子例程中声明,因此该变量具有全局作用域
- 第二个版本在 printLocalNumber 子例程中声明。由于它是在子例程中声明的,因此它只能在该子例程中使用。在第 12 行,当我们使用:
console.writeline(number1)
时,它会打印出局部变量
因此,查看 main 子例程中的代码,我们有 3 种不同的方法可以打印出变量 number1。
- 第 5 行。
console.writeline(number1)
:这使用 number1 的全局值,因为它在一个没有其他局部声明的子例程中 - 第 6 行。
printLocalNumber()
:这调用了子例程printLocalNumber()
,其中包含一个局部变量 number1,该变量在第 11 行中声明,因此它使用在第 11 行声明的 number1 值。 - 第 7 行。
printGlobalNumber()
:这调用了子例程printGlobalNumber()
,该子例程没有 number1 的局部变量,因此它使用 number1 的全局值
经验法则:如果您想快速区分全局变量和局部变量,请使用这些快速规则。但要注意,他们可能会试图欺骗你!
- 如果一个变量在函数或过程中声明,它就是一个局部变量
- 如果一个变量在迭代或选择语句中声明,它就是一个局部变量
- 如果声明从左侧边界缩进,它可能满足上述其中一个条件,并且是局部的
- 如果它不满足上述任何条件,并且在代码的主体中声明,它就是一个全局变量
标题 全局变量和局部变量有什么区别?
答案 全局变量可以从程序的所有部分访问,而局部变量只能在编程结构(如循环、函数或过程)内访问
为什么使用局部变量而不是全局变量是个好主意?
答案 局部变量在您完成使用后会释放内存,全局变量始终存储在内存中,无论您是否需要它们
在什么情况下您可能想要使用全局变量?
答案 当您想要声明一个需要被代码所有部分访问的变量时
列出以下代码的全局变量和局部变量。输入 Module calcAge
Sub Main()
dim age as integer
console.writeline("age?")
age = console.readline()
printMonths(age)
printDays(age)
End Sub
Dim months as integer
Sub printDays(a)
Dim d as integer
d = a * 365
console.writeline(d)
End Sub
Sub printMonths(a)
months = a * 12
console.writeline(months)
End Sub
End Module
答案 局部变量:age, d 全局变量:months 代码输出
age? 对于上面的代码,如何使代码更高效,以及为什么它会更高效?
答案 将
months 变量放在printMonths(a) 子例程中,使其成为局部变量。如果您将其保留为全局变量,即使您不需要它,它也会占用内存。列出以下代码中的全局变量和局部变量,列出输出 Module greetings
Dim q as integer = 6
Sub sayGoodbye()
for y = 1 to q
console.write("bye,")
loop
End Sub
Sub sayHello()
dim q as integer = 4
if q =< 4 then
console.write("hi,")
else
console.write("hello,")
endif
End Sub
Sub Main()
console.writeline(q)
sayHello()
sayGoodbye()
console.writeline(q)
End Sub
End Module
答案 局部变量:y(在第 4 行),q(在第 9 行) 全局变量:q(在第 2 行) 代码输出
6 |