宜昌本地软件开发与弱电工程服务商
项目咨询 · 快速响应
您当前的位置: > 博客2 > AS2与AS3技术

[AS3]as3循环语句for、for each、while等语句中使用闭包

2016-10-13 00:16:48 点击量:10 标签: 收藏本文

遇到一个很有意思的BUG,是关于闭包的使用,大概简化后类似于以下代码:

  1. var arr:Array = []; 
  2. for (var i:int = 0; i < 2; i++)  
  3.     arr[i] = function():void 
  4.     { 
  5.         trace(i); 
  6.     } 
  7. for each (var f:Function in arr)  
  8.     f(); 

猜一下上面代码的输出是什么?答案是:2 2

而事实上我期望的结果是:0 1

可为什么结果和我的期望相差这么大呢?

再看一段Lua代码:

  1. arr = {} 
  2.  
  3. for i=0,1 do 
  4.     arr[#arr+1] = function() 
  5.         print(i) 
  6.     end 
  7. end 
  8.  
  9. for _,v in ipairs(arr) do 
  10.     v() 
  11. end 

再猜一下,上面的答案?

这回的结果正好是我期望的结果,输出是:0 1

上面两段代码应该差不多是等价的,不过AS3中却并没有输出我期望的结果。

ABOUT US
宜昌农人网络科技有限公司

我们是一家提供综合软件外包与弱电工程服务的技术公司。

业务涵盖定制软件、管理系统、网站、小程序、APP、系统集成、网络布线、监控安防、门禁、机房建设及长期技术维护。

公司地址:湖北省宜昌市伍家岗区东站二路6号三峡(宜昌)大数据产业园海洋馆二楼A203室