<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
  <title>Bryan Dragon</title>
  
  <link href="http://www.bryandragon.com/" />
  <updated>2012-01-11T18:58:21+00:00</updated>
  <id>http://www.bryandragon.com/</id>
  <author>
    <name>Bryan Dragon</name>
    <email>hello@bryandragon.com</email>
  </author>
  
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/bryandragon" /><feedburner:info uri="bryandragon" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>bryandragon</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry>
    <title>Inside ActionScript 3.0 Event Handling</title>
    <link href="http://feedproxy.google.com/~r/bryandragon/~3/iEcKURUbreg/inside-actionscript-3-event-handling" />
    <updated>2009-05-27T04:12:00+00:00</updated>
    <id>http://www.bryandragon.com/articles/inside-actionscript-3-event-handling</id>
    <content type="html">&lt;p&gt;If you’ve programmed in ActionScript 3.0, you’re undoubtedly familiar with the following code:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;someObject&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;COMPLETE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;completeHandler&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;You may or may not know that &lt;code&gt;addEventListener()&lt;/code&gt; takes five parameters, the last three of which are optional.&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;listener&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Function&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;useCapture&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Boolean&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;priority&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;useWeakReference&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Boolean&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;Have you ever wondered what the last three parameters do? In this article I take a closer look at events and event handling in ActionScript 3.0. Hopefully, by more fully understanding these features, you’ll be better able to leverage the language’s robust event architecture in your projects.&lt;/p&gt;
&lt;h3&gt;Event Flow&lt;/h3&gt;
&lt;p&gt;When a display object dispatches an event, the event will pass through three phases, which together comprise the &lt;span style="font-style:italic"&gt;event flow&lt;/span&gt;: the capture phase, the target phase, and the bubbling phase. In ActionScript, these phases are represented by the constants &lt;code&gt;EventPhase.CAPTURING_PHASE&lt;/code&gt;, &lt;code&gt;EventPhase.AT_TARGET&lt;/code&gt;, and &lt;code&gt;EventPhase.BUBBLING_PHASE&lt;/code&gt;. When handling an event, its current phase can be determined by examining its &lt;code&gt;eventPhase&lt;/code&gt; property.&lt;/p&gt;
&lt;h4&gt;Capture Phase&lt;/h4&gt;
&lt;p&gt;First, during the capture phase, all ancestors in the event target’s display hierarchy are notified in reverse order, beginning with the top-level root ancestor and ending with the immediate parent of the event target. This gives ancestors a chance to perform some processing on the event object before the display object that dispatched the event itself is notified.&lt;/p&gt;
&lt;h4&gt;Target Phase&lt;/h4&gt;
&lt;p&gt;Next, once all ancestor listeners registered for the capture phase have been notified of the event, the event target itself will be notified. At this point, the event is said to be in the target phase. During the target phase, all listeners registered directly with the event target will be notified. By default, these listeners will be triggered in the order in which they registered with the event target. This order can be altered by passing an integer to the &lt;code&gt;addEventListener()&lt;/code&gt; method’s &lt;code&gt;priority&lt;/code&gt; parameter. The default event priority is &lt;code&gt;0&lt;/code&gt;. Among listeners registered for the same event type on the same object, those with the greatest priority will be notified first, and those will the lowest priority last, regardless of the order in which they registered with the object. To ensure that an event listener is notified only after all other listeners registered with the same object are notified, you can specify a negative priority. Do note that event priority only affects the order in which listeners are notified during the target phase; the order in which ancestor listeners are notified during the capture and bubbling phases cannot be altered.&lt;/p&gt;
&lt;h4&gt;Bubbling Phase&lt;/h4&gt;
&lt;p&gt;Finally, if the event is a bubbling event, meaning its &lt;code&gt;bubbles&lt;/code&gt; property is &lt;code&gt;true&lt;/code&gt;, all ancestors in the event target’s display hierarchy will be notified beginning with the immediate parent of the event target and bubbling up to the root ancestor. This is known as the bubbling phase. To register ancestor listeners on non-bubbling events, you must register to be notified during the capture phase, as there will be no bubbling phase:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// We pass true to the useCapture parameter&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;someObject&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;COMPLETE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;completeHandler&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;h3&gt;&lt;code&gt;target&lt;/code&gt; versus &lt;code&gt;currentTarget&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;An event’s &lt;code&gt;target&lt;/code&gt; property is a reference to the object that dispatched the event. For an event targeted at a nondisplay object, such as an instance of the &lt;code&gt;URLLoader&lt;/code&gt; class, the event&amp;#8217;s &lt;code&gt;target&lt;/code&gt; and &lt;code&gt;currentTarget&lt;/code&gt; properties will always be equal. For an event targeted at a display object, the event&amp;#8217;s &lt;code&gt;currentTarget&lt;/code&gt; property is a reference to the object whose listener is currently processing the event object. When an event is in the target phase, its &lt;code&gt;currentTarget&lt;/code&gt; will be same as its &lt;code&gt;target&lt;/code&gt;. When an event is in the capture or bubbling phases, &lt;code&gt;currentTarget&lt;/code&gt; could be the event target or any of its display ancestors with registered listeners. You will never set the &lt;code&gt;target&lt;/code&gt; or &lt;code&gt;currentTarget&lt;/code&gt; properties: they are read-only properties set by Flash Player at runtime.&lt;/p&gt;
&lt;h3&gt;Manipulating Event Behavior&lt;/h3&gt;
&lt;p&gt;Some ActionScript events have a default behavior. For example, when a text field dispatches a &lt;code&gt;TextEvent.TEXT_INPUT&lt;/code&gt;, the default behavior is for the entered text to appear in the text field. If an event is cancelable (i.e., its &lt;code&gt;cancelable&lt;/code&gt; property is &lt;code&gt;true&lt;/code&gt;), its default behavior can be canceled at runtime with the &lt;code&gt;Event&lt;/code&gt; class&amp;#8217;s &lt;code&gt;preventDefault()&lt;/code&gt; method. The following example illustrates the effects of preventing the default behavior for a &lt;code&gt;TextEvent.TEXT_INPUT&lt;/code&gt; event.&lt;/p&gt;
&lt;div style="text-align:center"&gt;
	&lt;div id="events_swf" style="width:150px;height:40px"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;span class="line-number"&gt;10&lt;/span&gt;
&lt;span class="line-number"&gt;11&lt;/span&gt;
&lt;span class="line-number"&gt;12&lt;/span&gt;
&lt;span class="line-number"&gt;13&lt;/span&gt;
&lt;span class="line-number"&gt;14&lt;/span&gt;
&lt;span class="line-number"&gt;15&lt;/span&gt;
&lt;span class="line-number"&gt;16&lt;/span&gt;
&lt;span class="line-number"&gt;17&lt;/span&gt;
&lt;span class="line-number"&gt;18&lt;/span&gt;
&lt;span class="line-number"&gt;19&lt;/span&gt;
&lt;span class="line-number"&gt;20&lt;/span&gt;
&lt;span class="line-number"&gt;21&lt;/span&gt;
&lt;span class="line-number"&gt;22&lt;/span&gt;
&lt;span class="line-number"&gt;23&lt;/span&gt;
&lt;span class="line-number"&gt;24&lt;/span&gt;
&lt;span class="line-number"&gt;25&lt;/span&gt;
&lt;span class="line-number"&gt;26&lt;/span&gt;
&lt;span class="line-number"&gt;27&lt;/span&gt;
&lt;span class="line-number"&gt;28&lt;/span&gt;
&lt;span class="line-number"&gt;29&lt;/span&gt;
&lt;span class="line-number"&gt;30&lt;/span&gt;
&lt;span class="line-number"&gt;31&lt;/span&gt;
&lt;span class="line-number"&gt;32&lt;/span&gt;
&lt;span class="line-number"&gt;33&lt;/span&gt;
&lt;span class="line-number"&gt;34&lt;/span&gt;
&lt;span class="line-number"&gt;35&lt;/span&gt;
&lt;span class="line-number"&gt;36&lt;/span&gt;
&lt;span class="line-number"&gt;37&lt;/span&gt;
&lt;span class="line-number"&gt;38&lt;/span&gt;
&lt;span class="line-number"&gt;39&lt;/span&gt;
&lt;span class="line-number"&gt;40&lt;/span&gt;
&lt;span class="line-number"&gt;41&lt;/span&gt;
&lt;span class="line-number"&gt;42&lt;/span&gt;
&lt;span class="line-number"&gt;43&lt;/span&gt;
&lt;span class="line-number"&gt;44&lt;/span&gt;
&lt;span class="line-number"&gt;45&lt;/span&gt;
&lt;span class="line-number"&gt;46&lt;/span&gt;
&lt;span class="line-number"&gt;47&lt;/span&gt;
&lt;span class="line-number"&gt;48&lt;/span&gt;
&lt;span class="line-number"&gt;49&lt;/span&gt;
&lt;span class="line-number"&gt;50&lt;/span&gt;
&lt;span class="line-number"&gt;51&lt;/span&gt;
&lt;span class="line-number"&gt;52&lt;/span&gt;
&lt;span class="line-number"&gt;53&lt;/span&gt;
&lt;span class="line-number"&gt;54&lt;/span&gt;
&lt;span class="line-number"&gt;55&lt;/span&gt;
&lt;span class="line-number"&gt;56&lt;/span&gt;
&lt;span class="line-number"&gt;57&lt;/span&gt;
&lt;span class="line-number"&gt;58&lt;/span&gt;
&lt;span class="line-number"&gt;59&lt;/span&gt;
&lt;span class="line-number"&gt;60&lt;/span&gt;
&lt;span class="line-number"&gt;61&lt;/span&gt;
&lt;span class="line-number"&gt;62&lt;/span&gt;
&lt;span class="line-number"&gt;63&lt;/span&gt;
&lt;span class="line-number"&gt;64&lt;/span&gt;
&lt;span class="line-number"&gt;65&lt;/span&gt;
&lt;span class="line-number"&gt;66&lt;/span&gt;
&lt;span class="line-number"&gt;67&lt;/span&gt;
&lt;span class="line-number"&gt;68&lt;/span&gt;
&lt;span class="line-number"&gt;69&lt;/span&gt;
&lt;span class="line-number"&gt;70&lt;/span&gt;
&lt;span class="line-number"&gt;71&lt;/span&gt;
&lt;span class="line-number"&gt;72&lt;/span&gt;
&lt;span class="line-number"&gt;73&lt;/span&gt;
&lt;span class="line-number"&gt;74&lt;/span&gt;
&lt;span class="line-number"&gt;75&lt;/span&gt;
&lt;span class="line-number"&gt;76&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;package&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flash.display.Graphics&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flash.display.Sprite&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flash.events.MouseEvent&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flash.events.TextEvent&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flash.text.TextField&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flash.text.TextFieldAutoSize&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;flash.text.TextFieldType&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;SWF&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;150&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;40&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frameRate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;40&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;backgroundColor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;0x333333&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Events&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;Sprite&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;Events&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;Boolean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;TextField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;Sprite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="o"&gt;():&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;TextField&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;TextFieldType&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;INPUT&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;border&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;borderColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x000000&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;background&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;backgroundColor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;xFFFFFF&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;addChild&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TextEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;TEXT_INPUT&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;textInputHandler&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;         &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;indicator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;Sprite&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;buttonMode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;useHandCursor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;130&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;addChild&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;updateIndicator&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;         &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;textInputHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;TextEvent&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="c1"&gt;// If enabled is false, prevent default event behavior. As a result,&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="c1"&gt;// no text is entered into the TextField.&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(!&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;         &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;preventDefault&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;textField&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;updateIndicator&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;updateIndicator&lt;/span&gt;&lt;span class="o"&gt;():&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;Graphics&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;graphics&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;clear&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;lineStyle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mh"&gt;0x000000&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;beginFill&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="mh"&gt;0x009900&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0x990000&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;drawCircle&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;endFill&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;Many ActionScript events are not cancelable; in these cases, calling &lt;code&gt;preventDefault()&lt;/code&gt; will have no effect on the event’s behavior.&lt;/p&gt;
&lt;p&gt;In addition to being able to prevent an event&amp;#8217;s default behavior, you can stop an event dispatch altogether. To accomplish this, the &lt;code&gt;Event&lt;/code&gt; class provides us with two methods: &lt;code&gt;stopPropagation()&lt;/code&gt; and &lt;code&gt;stopImmediatePropagation()&lt;/code&gt;. When an event’s &lt;code&gt;stopPropogation()&lt;/code&gt; method is invoked, the event dispatch is stopped once all registered listeners on the node that is currently processing the event object have returned. Invoking &lt;code&gt;stopImmediatePropagation()&lt;/code&gt; on an event will stop the event dispatch immediately, and no remaining event listeners will be notified.&lt;/p&gt;
&lt;h3&gt;Event Listeners and Performance Considerations&lt;/h3&gt;
&lt;p&gt;By default, when an event listener is registered with an object, the object keeps a reference to the event listener in an internal &lt;span style="font-style:italic"&gt;listener list&lt;/span&gt;. Furthermore, &lt;strong&gt;the object will retain this reference to the event listener throughout the execution of the program, even after there are no other references to the listener&lt;/strong&gt;. Consider the following:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;span class="line-number"&gt;10&lt;/span&gt;
&lt;span class="line-number"&gt;11&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;Object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{};&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="kc"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="nf"&gt;trace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;clicked!&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;Sprite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;Sprite&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listener&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// Even though we explicitly set o to null, s retains a reference to&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// listener, which prevents o from being garbage collected!&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;This behavior keeps the object to which the listener belongs in memory even after it has been explicitly set to &lt;code&gt;null&lt;/code&gt;. It shouldn’t take long to see how this could cause memory management issues!&lt;/p&gt;
&lt;p&gt;ActionScript does give us one way to get around this problem, in the form of &lt;code&gt;addEventListener()&lt;/code&gt; method&amp;#8217;s fifth and final parameter, &lt;code&gt;useWeakReference&lt;/code&gt;. When &lt;code&gt;true&lt;/code&gt;, the listener registered with the object can become eligible for garbage collection. Altering the previous example to take advantage of &lt;code&gt;useWeakReference&lt;/code&gt; makes &lt;code&gt;o.listener&lt;/code&gt;, and, consequently, &lt;code&gt;o&lt;/code&gt; eligible for garbage collection.&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;span class="line-number"&gt;10&lt;/span&gt;
&lt;span class="line-number"&gt;11&lt;/span&gt;
&lt;span class="line-number"&gt;12&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;Object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{};&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listener&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="kc"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="nf"&gt;trace&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;clicked!&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;Sprite&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;Sprite&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// Here we register the listener with useWeakReference set to true&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;listener&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// Now o is eligible for garbage collection as we&amp;#39;d expect&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;Just because &lt;code&gt;o.listener&lt;/code&gt; is eligible for garbage collection, however, doesn&amp;#8217;t necessarily mean it &lt;span style="font-style:italic"&gt;will&lt;/span&gt; be garbage collected. The solution is to explicitly unregister the event listener with the object, using &lt;code&gt;addEventListener()&lt;/code&gt;’s counterpart, &lt;code&gt;removeEventListener()&lt;/code&gt;, which has the following signature:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;removeEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;type&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;listener&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Function&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;useCapture&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;Boolean&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;Note the optional third parameter, &lt;code&gt;useCapture&lt;/code&gt;. Look familiar? It’s the same as &lt;code&gt;addEventListener()&lt;/code&gt;&amp;#8217;s third parameter. This is by design: you must pass the same value for &lt;code&gt;useCapture&lt;/code&gt; to &lt;code&gt;removeEventListener()&lt;/code&gt; when unregistering a listener as was passed to &lt;code&gt;addEventListener()&lt;/code&gt; when registering the listener. Given we have a listener,&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="c1"&gt;// Determine the event&amp;#39;s current phase:&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;eventPhase&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;EventPhase&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CAPTURING_PHASE&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="c1"&gt;// Handle event in capture phase&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;eventPhase&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;EventPhase&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;BUBBLING_PHASE&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="c1"&gt;// Handle event in bubbling phase&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;consider the following:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// clickHandler() is registered for the capture phase&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// ...and here it is registered again for the bubbling phase&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;clickHandler()&lt;/code&gt; is registered twice with &lt;code&gt;container&lt;/code&gt;: once for the capture phase and once for the bubbling phase. This means that two references to &lt;code&gt;clickHandler()&lt;/code&gt; are stored in &lt;code&gt;container&lt;/code&gt;&amp;#8216;s internal listener list. When &lt;code&gt;container&lt;/code&gt; dispatches a &lt;code&gt;MouseEvent.&amp;lt;span class="caps"&amp;gt;CLICK&amp;lt;/span&amp;gt;&lt;/code&gt; event, &lt;code&gt;clickHandler()&lt;/code&gt; will be notified twice. Now let&amp;#8217;s unregister &lt;code&gt;clickHandler()&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// Unregister clickHandler() for the bubbling phase&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;removeEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="c1"&gt;// ...and we must unregister it again for the capture phase&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="n"&gt;container&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;removeEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;When &lt;code&gt;clickHandler()&lt;/code&gt; is unregistered with &lt;code&gt;container&lt;/code&gt; the first time, &lt;code&gt;useCapture&lt;/code&gt; is not specified, so the default value of &lt;code&gt;false&lt;/code&gt; is assumed. If we didn&amp;#8217;t explicitly unregister &lt;code&gt;clickHandler()&lt;/code&gt; again for the capture phase (i.e., passing &lt;code&gt;true&lt;/code&gt; for &lt;code&gt;useCapture&lt;/code&gt;), it would still receive subsequent &lt;code&gt;MouseEvent.&amp;lt;span class="caps"&amp;gt;CLICK&amp;lt;/span&amp;gt;&lt;/code&gt; events dispatched by &lt;code&gt;container&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;You should make a habit of always removing event listeners when you no longer need them. Consider the following example:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;span class="line-number"&gt;10&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Example&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;Sprite&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;Example&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;         &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="kc"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;            &lt;span class="c1"&gt;// Do something with the click event&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;         &lt;span class="o"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;Can you see the problem? The curious reader will notice that &lt;strong&gt;we cannot unregister the event listener because there is no reference to it&lt;/strong&gt;; it is stranded! In this case, the stage will retain a reference to the anonymous function as long as the program is running, long after &lt;code&gt;Example&lt;/code&gt;&amp;#8216;s constructor has returned. To avoid this problem, simply don&amp;#8217;t use anonymous listeners. This is much better:&lt;/p&gt;
&lt;p&gt;&lt;div class="bogus-wrapper"&gt;&lt;notextile&gt;&lt;figure class="code"&gt; &lt;div class="highlight"&gt;&lt;table&gt;&lt;tr&gt;&lt;td class="gutter"&gt;&lt;pre class="line-numbers"&gt;&lt;span class="line-number"&gt;1&lt;/span&gt;
&lt;span class="line-number"&gt;2&lt;/span&gt;
&lt;span class="line-number"&gt;3&lt;/span&gt;
&lt;span class="line-number"&gt;4&lt;/span&gt;
&lt;span class="line-number"&gt;5&lt;/span&gt;
&lt;span class="line-number"&gt;6&lt;/span&gt;
&lt;span class="line-number"&gt;7&lt;/span&gt;
&lt;span class="line-number"&gt;8&lt;/span&gt;
&lt;span class="line-number"&gt;9&lt;/span&gt;
&lt;span class="line-number"&gt;10&lt;/span&gt;
&lt;span class="line-number"&gt;11&lt;/span&gt;
&lt;span class="line-number"&gt;12&lt;/span&gt;
&lt;span class="line-number"&gt;13&lt;/span&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;pre&gt;&lt;code class="actionscript3"&gt;&lt;span class="line"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Example&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;Sprite&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;Example&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="c1"&gt;// Because we have a reference to clickHandler(),&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="c1"&gt;// we can unregister it later&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;addEventListener&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;CLICK&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="n"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;function &lt;/span&gt;&lt;span class="nf"&gt;clickHandler&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="kt"&gt;MouseEvent&lt;/span&gt;&lt;span class="o"&gt;):&lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;      &lt;span class="c1"&gt;// Do something with the click event&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;span class="line"&gt;
&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/notextile&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-style:italic"&gt;Referenced Works:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="margin-left:24px"&gt;
	&lt;li&gt;Moock, Colin. &lt;u&gt;Essential ActionScript 3.0&lt;/u&gt;. Cambridge: O’Reilley, 2007.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Adobe Flex 3.3 Language and Components Reference&lt;/u&gt;. Feb. 2009. Adobe Systems, Inc. 17 May 2009 &amp;lt;&lt;a href="http://livedocs.adobe.com/flex/3/langref/"&gt;http://livedocs.adobe.com/flex/3/langref/&lt;/a&gt;&amp;gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-style:italic"&gt;Other AS3 Event Resources:&lt;/span&gt;&lt;/p&gt;
&lt;ul style="margin-left:24px"&gt;
	&lt;li&gt;McCauley, Trevor. &lt;u&gt;Introduction to Event Handling in ActionScript 3.0&lt;/u&gt;. Feb. 2007. Adobe Developer Connection. 25 May 2009 &amp;lt;&lt;a href="http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html"&gt;http://www.adobe.com/devnet/actionscript/articles/event_handling_as3.html&lt;/a&gt;&amp;gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/bryandragon/~4/iEcKURUbreg" height="1" width="1"/&gt;</content>
  <feedburner:origLink>http://www.bryandragon.com/articles/inside-actionscript-3-event-handling</feedburner:origLink></entry>
  
</feed>

