在解释闭包之前先解释几个定义。
词法定界(也叫静态定界)是许多语言约定使用的,变量只能在这套范围(按功能排列)内被一些已经定义了的代码段中调用。
也可以理解为函数A中包含了函数B,函数B可以访问函数A的局部变量的这种语法特性称之为词法定界。
第一类值可以保存变量中(全局变量和局部变量都可),可以作为参数传递给其他函数,可以作为函数返回的值返回。
在Lua中函数是严格遵循词法定界的第一类值。
闭包是一个函数和该函数访问的非局部变量组成,函数多次调用时可以正确访问上次使用的非局部变量。
function A()
local ref = 1
local function B()
ref = ref + 1
end
return B
end
local a = A()
print("call function a = ", a())
在上述代码中 ref即是函数B的非局部变量,多次调用a,ref的值并不会重置。
实际在Lua语言中只有闭包而没有函数,函数本身只是闭包的一种原型。
仅作为个人学习记录,如有错误欢迎指出。