退出函数后在全局范围内使用局部变量

时间:2014-06-02 23:09:46

标签: actionscript-3 flex flash-builder

我知道AS3的工作方式如下

var str1:String = "Global"; 
function scopeTest () 
{ 
    var str1:String = "Local"; 
    trace(str1); // Local 
} 
scopeTest(); 
trace(str1); // Global

我怎么能让它像这样工作?见最后一行

var str1:String = "Global"; 
function scopeTest () 
{ 
    var str1:String = "Local"; 
    trace(str1); // Local 
} 
scopeTest(); 
trace(str1); // Local

3 个答案:

答案 0 :(得分:3)

在新作用域中使用var关键字时,它会向该作用域附加一个新属性。只需在函数中省略str1声明

function scopeText():void
{
    str1 = 'Local';
}

这将查看现有属性str1的外部范围。

答案 1 :(得分:1)

var str1:String = "Global"; 
function scopeTest () 
{ 
    //use the global variable here
    str1 = "Local"; 
    trace(str1); // Local 
} 
scopeTest(); 
trace(str1); // Local

或使用此

var str1:String = "Global"; 
function scopeTest () 
{ 
    //use "this" keyword
    this.str1 = "Local"; 

    var str1:String = "Local";
    trace(str1); // Local 
} 
scopeTest(); 
trace(str1); // Local

完整的示例代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
               creationComplete="init(event)">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;

            protected function init(event:FlexEvent):void
            {
                scopeTest(); 
                trace(str1); // Local
            }

            public var str1:String = "Global"; 
            public function scopeTest():void 
            { 
                //use "this" keyword
                this.str1 = "Local"; 

                var str1:String = "Local";
                trace(str1); // Local 
            } 


        ]]>
    </fx:Script>

    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
</s:Application>

答案 2 :(得分:0)

更改变量名称以避免冲突。 Var名称很便宜。为什么重复使用它们,特别是如果它们甚至可能导致冲突?