关于“外部的局部变量”
2011-03-29 15:44
323 查看
function newCounter()
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>
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>
相关文章推荐
- 关于静态局部变量与静态外部变量
- 关于C++中的局部变量
- Unknown command '\b'. 关于Mysql导入外部数据库脚本报错的解决
- 内部了使用外部类的局部变量,这个局部变量必须用final修饰
- 关于java中成员变量有默认初始化而局部变量没有
- 关于.NET调用外部CSS的问题
- 关于supesite后台添加外部链接后字符转义的问题
- 关于postgerSQL 的 外部ip连接问题
- 关于栈和局部变量的问题
- 关于“无法解析的外部符号”和“该符号在函数_wmain 中被引用”的问题
- 内部类引用外部类中的局部变量时,该变量需final
- 关于在dll中申请内存,外部释放的问题
- 【Qt5 for VS】关于 VS2013+qt5.4.0 QSerialPort 编译时提示找不到外部符号,连接出错的解决方案【转载】
- 关于VS报无法解析外部符号的错误
- 关于各种无法解析的外部符号问题的相应解决方案
- 关于 error LNK2001: 无法解析的外部符号 ___wargv问题
- 关于全局变量,局部变量以及成员变量的区别
- 关于局部变量问题得出的发现与反思
- 关于stm32f030增加bootloader后外部中断不响应的问题
- 关于打开外部程序并且发送一个按键消息 (转