使用嵌套的函数作为事件监听器<?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. JS跨域访问(ajax跨域)
  2. Slack推安全企业加密管理可轻易用密钥控制数据
  3. c++变量重新赋值_Java基础二:一文讲透变量与数据类型
  4. tkinter menu
  5. javascript 查看变量类型
  6. 关于java.util.ConcurrentModificationException和remove倒数第二个元素
  7. Linux开机启动流程详细步骤是什么?
  8. skywalking学习
  9. MATLAB实现遥感图像分类——K均值算法
  10. 基于似然比检验统计量的异常轨迹检测
  11. MindAR初体验——一款js实现的AR库
  12. 你不知道的HelloGitHub!
  13. 手机图片怎么做成笔记 手机照片笔记怎么制作
  14. 解决错误代码:0xc000007b系统蓝屏问题
  15. CM1-确定字符互异-【字符串】
  16. 电信行业大数据应用的四个方向
  17. 源码推荐 VVebo剥离的TableView绘制
  18. [转]深度剖析闪电网络
  19. 限流的方式,为什么要限流,怎么实现限流
  20. 建模simulink - xpc调试手段

热门文章

  1. androidx86安装pc后无法联网_问题解决记录-npm和yarn全局安装成功后命令无法执行的问题...
  2. 【Groovy】MOP 元对象协议与元编程 ( 使用 Groovy 元编程进行函数拦截 | 重写 MetaClass#invokeMethod 方法拦截 JDK 中已经定义的函数 )
  3. 【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
  4. 【Groovy】map 集合 ( map 集合操作符重载 | *. 展开操作符 | 代码示例 )
  5. 【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
  6. 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | LoadedApk 源码分析 )
  7. 【Kotlin】Kotlin 单例 ( 懒汉式 与 恶汉式 | Java 单例 | Kotlin 单例 | 对象声明 | 伴生对象 | get 方法 | ? 与 !! 判空 )
  8. 图解 HTTP 笔记(四)——HTTP 状态码
  9. JavaScript的学习
  10. node.js入门系列(一)--Node.js简介