使用嵌套的函数作为事件监听器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
         除了将事件监听器函数的名字传递给addEventListener()方法,你还可以定义一个内部函数(也可以理解为闭包)。
         在下面的例子中,当按钮被点击,嵌套的函数就被调用:
<!-- events/AddingInnerFunctionListener.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">
<mx:Script><![CDATA[
import mx.controls.Alert;
private function initApp():void {
b1.addEventListener("click",
function(e:Event):void {
Alert.show("The button was clicked.");
}
);
}
]]></mx:Script>
<mx:Button id='b1' label="Click Me"/>
</mx:Application>
         闭包函数除了可以在对象或类中创建,还可以在一个方法被调用时创建。闭包函数将保持它被定义时的范围。当它作为一个参数或一个返回值被传递到不同的范围时,将产生有趣的结果。
         例如,下面的代码创建了两个函数。叫做foo()的函数返回一个叫做retArea()的用来计算矩形面积的嵌套函数,叫做bar()的函数调用foo()并且将它返回的闭包函数保存在一个叫做myProduce的变量中,bar()还定义了叫做x的本地变量,并赋值2。当闭包函数myProduct()被调用时,它继续持有在foo()中定义的变量x。bar()函数将返回的数值显示在TextInput控件中,但不是8。
<?xml version="1.0"?>
<!-- events/FunctionReturnsFunction.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="foo()">
<mx:Script><![CDATA[
[Bindable]
private var answer:String;
private function foo():Function {
var x:int = int(ti1.text);
function rectArea(y:int):int { // function closure defined
return x * y;
}
return rectArea;
}
private function bar():void {
var x:int = 2; // ignored
var y:int = 4; // ignored
var myProduct:Function = foo();
answer = myProduct(int(ti2.text)); // function closure called
}
]]></mx:Script>
<mx:Form width="107">
<mx:FormItem label="X">
<mx:TextInput id="ti1" text="10" width="37" textAlign="right"/>
</mx:FormItem>
<mx:FormItem label="Y" width="71">
<mx:TextInput id="ti2" text="20" width="38" textAlign="right"/>
</mx:FormItem>
<mx:Label id="label1" text="{answer}" width="71" textAlign="right"/>
</mx:Form>
<mx:Button id='b1' label="Compute Product" click="bar()"/>
</mx:Application>
        
         如果你传递给addEventListener()方法的监听器是一个嵌套的内部函数,那就不要将useWeakReference参数的值设定为true。例如:
addEventListener("anyEvent",
function(e:Event) { /* My listener function. */ },
false, 0, true)
         在这个例子中,如果将ture作为最后一个参数的值将导致意料之外的结果。对于Flex,内部函数其实就是一个对象,并且可以被垃圾回收释放。如果你将useWeakReference参数设定为true,就像上面例子里展示的那样,那么将不会有内部函数的长久的引用,在下一次回收时,可能会释放这个函数,并且当事件再次被触发时,函数将无法被调用。
         如果还有内部函数的其他引用,那么垃圾回收就不会释放它。
       类级的成员函数将不会被垃圾回收,这样你就可以将useWeakReference参数设定为true。

转载于:https://blog.51cto.com/flexria/154533

Flex的事件(六)相关推荐

  1. Flex的事件(十四)

    一.   关于键盘事件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /& ...

  2. 翻译: Flex Collection 事件和手动通知变化

    转自:riameeting Collection事件和手动变化通知 集合用事件来表示集合发后了变化. 你能用这些事件监控变化以作相应的显示上的更新. Collection事件: CollectionE ...

  3. 利用flex布局实现六个骰子

    一.初步布局 1.我们先设立一个外部盒子用flex布局将子代居中 .father {display: flex;margin: 200px auto;border-top: 2px solid #82 ...

  4. Flex启动事件的执行顺序

    很多时候,在创建一个Flex应用程序,不知道什么时候执行哪儿个启动事件.它们被执行的顺序是怎么排序的? 首先看一看都有哪儿些启动事件,主要有preinitialize,initialize,creat ...

  5. Flex的事件(三)

    1.     定义对象事件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  6. 【就你不知道-Flex 自定义事件-龙骑士之死】(2012-05-25 08:29)

    一:目的 问:为什么要自定义事件? 答:系统提供事件不能满足. 举例:需要传递参数. 二:背景 事件不是鼓励存在的,事件始终是和一个对象相关联的,否则,单独说事件毫无意义. 举例:当英雄血为0时,死亡 ...

  7. Flex事件机制(二)

    上一篇简单的介绍了Flex的事件机制以及处理事件的四种方式,本篇的主要内容是利用自定义事件在父子组件之间传递数据. 在Flex开发中,很多时候需要在父子组件之间传递数据,通过事件可以实现数据的传递,现 ...

  8. FLEX事件机制整理

    一.引 很多新人对Flex的事件机制都不太熟悉,在使用过程中难免会出现各种问题,这是一个非常普遍的问题,为了更快更好的帮助大家,将介绍一下Flex中事件的各种机制和用法. Flex的精髓之一就是事件和 ...

  9. (待补充)CSS进阶--flex布局

    目录 flex 之前 flex 来了 基本概念 flex container 的六个属性 flex item 的六个属性 例子 参考 flex 之前 我们用什么布局?主要使用 normal flow( ...

最新文章

  1. Linux入门第四集!Jar包的入门、使用、部署!怎么打Jar包?
  2. IntelliJ IDEA快捷键总结
  3. C++ 11 中的POD
  4. 抛开flash,自己开发实现C++ RTMP直播流播放器
  5. 朴素贝叶斯分类器 文本分类_构建灾难响应的文本分类器
  6. VC6.0 +WDK 开发驱动的环境配置
  7. shell read
  8. XML中的DOCTYPE属性
  9. laravel redis_php session 存储到redis里
  10. Hive命名空间-自定义变量
  11. FTT字体绘制,2D阶段
  12. hdoj2084:数塔(dp基础题----递归写法/状态转移方程法)
  13. 计算机怎么语音通话,微信电脑版怎么语音聊天?微信电脑版语音聊天教程
  14. 在UBUNTU 13.1 中使用五笔拼音混合输入法
  15. muduo源码分析2——Singleton分析
  16. CAD图纸比例设置不同时CAD标注样式设置为相同的操作教程
  17. ResNet详解:ResNet到底在解决什么问题?
  18. Linux--增加用户、添加用户组
  19. 人行征信密码控件卸载后残留,导致fiddler自动关闭解决办法
  20. wps 甘特图_制作甘特图提升办公效率!亿图下的这款项目管理软件很不错

热门文章

  1. hdu5253最小生成树
  2. 【Android 应用开发】Canvas 精准绘制文字 ( 文本边界坐标解析 | 绘图位置 )
  3. 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★
  4. 【感悟随笔】没能变强是因为你太贪图舒服了
  5. android中Invalidate和postInvalidate的区别
  6. Python开发【第三篇】:Python基本数据类型
  7. JSP自定义标签开发与打包
  8. Enumeration接口
  9. 从xib 创建 collectionViewCell
  10. Codeforces Round #343 (Div. 2) D. Babaei and Birthday Cake 线段树维护dp