版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/HQ354974212/article/details/89455695
原理:
1.全局变量:定义在函数外的变量就叫全局变量(不在代码块里面定义的变量)
2.局部变量:定义在函数内的变量就叫局部变量(在代码块里面定义的变量)
区别:
1.局部变量只能在它所在的作用域里面使用,全局变量在任意函数内都可以使用
2.局部变量在它所在的代码块结束后就被回收,全局变量在程序结束的时候才会被回收
作用域:
1.作用域里面可以声明作用域外同名的变量,作用域里面同名的变量会暂时遮盖住外面的变量
(当局部变量和全局变量重名时,那么在它这个函数里面局部变量会暂时遮盖住全局变量)
逐步剖析:
print(a) --向上查找,变量a还未赋值,输出nil
a = 111 --全局变量(整个lua文件中都可以使用,向下的范围)
do
local a = 0 --局部变量
a = 1 --全局变量
print(a) --向上查找,首先找到全局变量a=1,输出1
b = 222 --全局变量(整个lua文件中都可以使用,向下的范围)
end
function fun()
local c = 333 --局部变量
d = 444 --全局变量
end
print(a) --先在全局找,找不到再去代码块里找
print(b) --同上
print(c) --未调用函数,c的值为nil
print(d) --同上
print("----需要先调用函数,否则全局变量d没有值--")
fun()
print(c)
print(d)
运行结果如下: