[AS3]as3循环语句for、for each、while等语句中使用闭包
在循环语句for、for each、while等语句中使用闭包需要注意的地方
遇到一个很有意思的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中却并没有输出我期望的结果。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...