function newCounter()
local i = 0
return function()
i = i + 1
return i
end
end
print(c1())
print(c1())
c2=newCounter() --②
print(c2())
print(c2())
local i = 0
return function()
i = i + 1
return i
end
end
c1
= newCounter --①print(c1())
print(c1())
c2=newCounter() --②
print(c2())
print(c2())
我的理解是
①c1是相当于主函数newCounter的地址,要再执行子程序须用c1()(),不过这样的话 “外部的局部变量i”就没有累加的作用了,因为每个新的c1()都将产生一个新的闭包
②这样出来的c2就相当于产生了一个闭包,或者说把这个潘多拉闭包释放出来了(释放出的内容有产出一个外部的局部变量i,以及将递增的子程序返回给了c2),执行c2就是执行递增,并且“外部的局部变量i"相当于c2里面的全局变量.
这样说吧,类似在c2这个点,
由<div id=c2"></div>
变成了(新增了一个代码块)
<div id="c2">
<div>这里有i 还有代码函数,相当于加了个结点进来,i作用于此div块,所有c2调用将会影响i,也就是闭包</div>
</div>