概念

闭包是由一个函数和该函数会访问的非局部变量组成。

非局部变量是指既不是全局变量也不是函数内的局部变量,而是外层嵌套函数的局部变量。

若一个闭包没有会访问的非局部变量,则是函数

 

闭包与函数区别

Lua编译一个函数时,会生成一个原型,里面包括函数体需要用到的常量值、函数体对应的虚拟机指令和一些调试信息

在运行时,每当lua执行到一个function...end时,就会创建一个新的数据对象,里面包括了一个函数原型的引用和upvalue引用组成的数组,所以函数时编译器概念,闭包是运行时概念。