2014-03-19 52 views
0

我想通過「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

請勿嵌套函數。 – Marty

回答

1

嵌套函數是匿名函數,它們不能在父函數作用域之外訪問。所以不,你不能從以外撥打它。

但你可以簡單地把它作爲一個類的成員,並能夠使用它沒有任何區別。

嵌套方法並不邪惡,但它們主要是爲非stictly類型的語言(例如JavaScript)設計的,並且不需要在AS3中使用它。

如果要動態創建函數,則使用嵌套函數的方式,例如var myFunc = function(){};並且可以通過將其設置爲空來刪除它。但在AS3中,這樣的功能具有最長的通話時間,並且可以成爲真正的性能打擊者,所以經驗法則 - 不使用嵌套功能,除非有很好的理由去做

+0

有趣的是,這個isent真的是嵌套或不嵌套,它是如何讓這個函數完成數學運算,我正在尋找parent_mc.width,但它只是在這裏給我。 – shelfish

+0

嗯,問題的標題表明這個問題是關於嵌套函數和對它們的訪問。 還有一個答案 - 將所需的功能作爲類成員使用,或者如果您在框架中編寫,只需從父函數中將其取出即可。 –

+0

但多數民衆贊成我原來的問題,我可以得到我需要的數字「我想通過」galleryArr.length * 400;「側功能onGalleryLoaded」出側onGalleryLoaded其始終0 – shelfish