2016-10-13 00:16:48 点击量:10 标签: 收藏本文
遇到一个很有意思的BUG,是关于闭包的使用,大概简化后类似于以下代码:
- var arr:Array = [];
- for (var i:int = 0; i < 2; i++)
- {
- arr[i] = function():void
- {
- trace(i);
- }
- }
- for each (var f:Function in arr)
- {
- f();
- }
猜一下上面代码的输出是什么?答案是:2 2
而事实上我期望的结果是:0 1
可为什么结果和我的期望相差这么大呢?
再看一段Lua代码:
- arr = {}
- for i=0,1 do
- arr[#arr+1] = function()
- print(i)
- end
- end
- for _,v in ipairs(arr) do
- v()
- end
再猜一下,上面的答案?
这回的结果正好是我期望的结果,输出是:0 1
上面两段代码应该差不多是等价的,不过AS3中却并没有输出我期望的结果。
我们是一家提供综合软件外包与弱电工程服务的技术公司。
业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。
公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室