AS3.0事件侦听优先级确定的方法是按顺序线性执行么

  AS3.0事件侦听优先级确定的方法是按顺序线性执行么?事后才觉得问这个问题挺白痴的(遭到同事鄙视。。。),脚本执行,不涉及资源加载和远程调用,哪来的异步呢。。。。

  结论是线性执行,不论优先级高的那个方法要执行多久,后面的都会等着,这也提醒我们某个事件处理逻辑和算法写得不要过于复杂,否则会耽误后面的侦听函数执行。所有的侦听函数都被放在EventDispatcher的一个listeners数组里,不过应该是private的,开debug模式强行输出可以看到一些内容。有兴趣的继续看吧:

  我被绕进去,是来源于这段话:“给一个对象注册多个监听器,即使每个监听器的优先级别不同,但也无法保证后一个执行时前面的监听函数已经执行完毕。设计时,后面的函数不应该以前者执行完毕为条件。”---来源于Flex学习笔记_08 Flex的事件机制_高级应用

测试代码如下:  

 public class TestEvent extends Sprite

        {
                private var num:Number = 0;
                public function TestEvent()
                {
                        var testNum:int = 0;
                        for(var i:int = 0; i < 1000000; i ++){
                                testNum += i;
                        }
                        trace("the final num is:" + testNum);
                        initListener();
                        
                }
                private function initListener():void{
                        stage.addEventListener(MouseEvent.MOUSE_DOWN,func2,false,2);
                        stage.addEventListener(MouseEvent.MOUSE_DOWN,func3,false,3);
                }
                private function func2(event:MouseEvent):void{
                        trace("when do fun2,the num is:"+num);
                }
                
                private function func3(event:MouseEvent):void{
                        trace("func3 begin,the num is:" + num);
                        for(var i:int = 0; i < 1000000; i ++){
                                num += i;
                        }
                        trace("func3 complete,the num is:"+num);
                }
输出结果如下:
the final num is:1783293664
func3 begin,the num is:0
func3 complete,the num is:1783293664
when do fun2,the num is:1783293664

参考资料:

AS里事件到底是异步执行还是同步执行

你可能感兴趣的:(as3)