闭包是一个函数加上它可以正确访问的 upvalues。
闭包的基础是词法定界。
函数内部嵌套另一函数时,内部函数体可以访问外部函数的局部变量,这种特征我们称作词法定界。
function newcount()
local a;
c = function()
a=a+1; //内部函数可以访问外部的a.
end
c();//执行内部函数。
return a;
end
闭包的另一基础是:函数可以作为返回值。
如
function newcount2()
local a=1;
return function() --外部函数返回一个函数。
a=a+1;
return a;
end
end
闭包就是被返回函数+此函数被修改的本地变量。
闭包不是一个函数,也不是一个变量。是两者的组合体。
xx=newcount2()
这里的xx就是一个闭包。
print(xx())
print(xx())
-------------------打印的结果就是
2
3
感觉与C++的类与对象,对象的方法的概念类似。
--------------------------------------------
2017-10-23
闭包的三个要素。
1,闭包函数;2 工厂(创建并返回闭包函数的函数)3,upvalue(闭包函数可以访问到的外部变量)