如何从嵌套函数中访问变量

时间:2014-03-19 01:28:16

标签: actionscript-3 variables

我想将“galleryArr.length * 400;”传递给onGalleryLoaded函数,因此我创建了函数“initmyWidth”并使用“trace(initmyWidth());”从函数外部调用它。但它得到一个错误“调用可能未定义的方法initmyWidth” 有没有办法在函数之外传递一个级别?

function onGalleryLoaded(e:Event):void
    {

        var imageX:int = 0;
        var imageY:int = 0;


        for each (var image:Sprite in galleryArr)
        {

            var my_mc:MovieClip = new MovieClip();

            my_mc.addChild(image);


            parent_mc.addChild(my_mc);

            my_mc.width = 400;
            my_mc.height = 400;
            my_mc.x -=  parent_mc.width;
            my_mc.y = imageY;

            function initmyWidth():Number
            {
                var myWidth:Number = galleryArr.length * 400;
                return myWidth;
            }


            imageX -=  my_mc.width + PADDING_X;
            if ( (imageX+my_mc.width) > stage.stageWidth )
            {
                imageX = parent_mc.width;
                imageY = 0;
            }

        }
    }

    trace(initmyWidth());

1 个答案:

答案 0 :(得分:1)

嵌套函数是匿名的,它们不能在父函数范围之外访问。所以不,你不能从外面打电话

但你可以简单地把它作为一个类成员,并且能够毫无差别地使用它。

嵌套方法并不邪恶,但它们主要是针对非stictly类型语言(例如JavaScript)而设计的,并且不需要在AS3中使用它。

如果要动态创建函数,则使用嵌套函数的方法,例如var myFunc = function(){};并且可以通过将其设置为null来删除它。但是在AS3中这样的功能具有最长的通话时间并且可以成为真正的性能击球手,所以一个经验法则 - 不使用嵌套功能,除非有一个非常好的理由去做