我知道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
答案 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名称很便宜。为什么重复使用它们,特别是如果它们甚至可能导致冲突?