为什么我在这里收到“重复变量定义”错误?

时间:2010-02-04 16:46:34

标签: flash actionscript-3 arrays

它认为Flash告诉我我的数组tabData正在重复,但我只在我的代码的var部分设置了一次:

这是错误行:

for (var i in tabData) {

TabMenu类

private var tabData:Array = []; // <- tabData created here

public function drawTabMenu(w, h, color, videoHDiff, ypos):void
    {           
        trace("drawTabMenu --------------");

        for (var i in Global.xml..tab) {
            tabData.push( {id:Global.xml..tab[i].@id, video:Global.xml..tab[i].vid} );
        }

        // DRAW GRAPHICS CODE HERE...

        //draw the tabs
        for (var i in tabData) { // < line throwing error

            var tab:MovieClip = new TabDefault();
            var active:MovieClip = new TabActive();
            tabArray.push(tab);
            tab.video = tabData[i].video;
            tab.addChild(active);
            i < 1 ? active.visible = true : active.visible = false;
            tab.y = topShadow.y + 5;

            // add in the textfield here
            // addChild(tf);

            // resize the tab background to textfield
            tab.x = i < 1 ? 10 : tabArray[(i-1)].x + (tabArray[(i-1)].width+3);
            tab.active = i < 1 ? tab.active = true : tab.active = false;
            topShadow.addChild(tab);

            tab.mouseChildren = false;
            tab.buttonMode = true;
            tab.addEventListener(MouseEvent.CLICK, tabClick);
        }

        // set default thumbnails here
        trace("FIRST TAB DATA: "+tabData[0].video);
    }

2 个答案:

答案 0 :(得分:3)

我不知道flash,但事实上你使用i作为中的循环变量循环问题?我认为它不应该 - 当然不会是Java - 但也许就是这样。

此外,与您的问题无关,这一行:

tab.active = i < 1 ? tab.active = true : tab.active = false;

会更容易阅读:

tab.active = i < 1;

同样,假设flash像语言一样,我知道的更好。

答案 1 :(得分:3)

i是重复变量,而不是tabData。 Actionscript只允许函数作用域,而不是许多(大多数)其他语言的块作用域。

将块级范围变量显然提升到函数范围称为hoisting

资源: