0x1. 全局变量


  • 全局变量
    1. global_var = 1
    每个函数的结构中都会有一个env变量用于指向其环境变量表。默认从父函数继承过来,源文件则直接使用lua_Statel_gt。由于lua中没有变量定义这么一说,因此在函数间的全局变量是属于同一变量。

0x2. 局部变量


  • 函数内局部变量

    function fun1()
    local var = 1
    end
    

    这种直接保存到栈中,寄存器索引直接编码到指令中。

  • 函数外局部变量

    function parent()
    local pvar = 1
    function clild()
      print(pvar) --访问上层函数的局部变量
    end
    end
    

    这个也是常说的upValue,由于在lua中每个函数都有一个对应栈,但是又需要直接子函数访问父函数的本地变量。例如上面的例子clild函数访问了parent函数中的局部变量pvar。所以在lua中引入了upvalue放到函数中,用于表明当前函数有多少变量是父函数的变量。并有对应的指令用于操作upvalue

0x3. Registry


用于C语言保存数据用的,防止lua代码破坏c代码的数据。