·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

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

时间:2015-09-13 22:24酷播
在循环语句for、for each、while等语句中使用闭包需要注意的地方

遇到一个很有意思的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中却并没有输出我期望的结果。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器