范围

2011-05-06 75 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