upvalue是内嵌函数中能够访问到的外包函数中的局部变量;称为外部局部变量感觉更为贴切。
特征:在外包函数中的局部变量的作用域结束后,内嵌函数中的upvalue跟外包函数中的局部变量是相对独立的。
原理:lua为每一个函数分配一个闭包,当执行到内嵌函数的声明语句时,会检查有无upvalue,如果有会在内嵌函数的闭包中加入这些upvalue,upvalue跟外包局部变量的值在外包函数作用域结束前是同步的;因为当外包函数作用域结束时,内嵌函数会为其闭包的upvalue进行存档。所以外部局部变量的值一般是外包函数结束时局部变量的值。
特征:同一个外包函数下不同的内嵌函数之间,upvalue是同步的。