範圍

2011-05-06 55 views
1
 // content loaders 
     if (_contentLoaders != null) 
     { 
      // iterate through all the content loaders then dispose it 
      for (var i:int = 0; i < _contentLoaders.length; i++) 
      { 
       _contentLoaders[i].dispose(); 

      } 
      _contentLoaders.splice(0, _contentLoaders.length); 
      _contentLoaders = null; 
     } 

     // text content loaders 
     if (_textContentLoaders != null) 
     { 
      // iterate through all the text content loaders then dispose it 
      for (var i:int = 0; i < _textContentLoaders.length; i++) 
      { 
       _textContentLoaders[i].dispose(); 
      } 
      _textContentLoaders.splice(0, _textContentLoaders.length); 
      _textContentLoaders = null; 
     } 

好傢伙,我也碰到過很多次這個問題(事實上,它不應該是一個問題,如果我理解正確的話應該是語法的設計是這樣的方式)。範圍

從上面的代碼,你會看到2個for循環塊,你看到我爲每個塊聲明瞭變量i。我使用Flash v.10.2設置了FlashDevelop來運行此代碼。它提示我錯誤說「重複的變量定義」

我可以通過在這2個for-loop塊之外聲明變量i來解決這個問題,並且爲它們兩個重用i。但對我自己來說,這並不是那麼幹淨的代碼。 我的問題是

「由limitting 變量的作用域這樣這是動作的意圖 3是那樣的方式?或者它可以 修改可以調了一些選項 編譯器或在這種情況下說口譯員爲 ?「

在此先感謝。

回答

0

在第二個循環中將名稱i更改爲j或在for循環之外聲明i並且所有問題都將得到解決。

的問題是,一旦你聲明i第一次,它在功能塊的範圍存在,所以當你試圖重新聲明它的塊進一步下跌你所得到的錯誤。

我個人認爲在循環之外聲明i的方法並沒有錯。

這是AS3中的範圍問題,您也很可能在其他許多OOP語言中找到它。

+0

這也是一個想法,但這會增加處理不必要的索引變量的數量。 – haxpor 2011-05-06 02:12:27

+0

您不能重新聲明具有相同名稱的變量,因爲原始函數塊的長度將存在。唯一的選擇是聲明一次並重用它,或更改第二個變量的名稱。 – Chris 2011-05-06 02:15:45

+0

我希望它是本地的每個循環塊。 – haxpor 2011-05-06 02:16:05