2011-09-11 51 views
1

我有一個AS3函數,在URLRequest失敗時運行。我需要能夠使用這個函數來分配全局變量,然後我可以使用其他函數進行檢查。如何在函數內部分配全局變量?Actionscript 3 - 在函數內部分配全局變量

謝謝!

編輯:這是變量(soundFile2Exist)我試圖讓我的功能之外:

function onIOError(e:IOErrorEvent):void 
{ 

    var soundFile2exist = null; 
    trace (soundFile2exist); 
} 

我不使用裝箱率裏面我的代碼。還有辦法做到這一點?

function playMusic(evt:MouseEvent):void 
{ 
    channel = myMusic.play(songPosition); 
    if (soundFile2exist != null) { 
      channel2 = myMusic2.play(channel.position); 
    } 
    myTimer.start(); 
    btnPlay.mouseEnabled = false; 
    trace (soundFile2exist); 

} 
+0

我強烈反對這個問題的整個前提,你會想在使用全局變量的函數之間傳遞數據。 – jhocking

+0

你是什麼意思?我可能誤解了我的問題。 – user547794

+0

在不涉及全局變量的函數之間共享數據的方法有很多。全局變量幾乎是完成該任務的最糟糕的方式。 – jhocking

回答

4

如果你的代碼是「不在包」(如在時間軸中的幀腳本),任何變量聲明上同一級別,同一範圍,因爲你的職責是在該範圍內的功能訪問,所以你可以做的這個東西線:

var soundFile2exist; 

function onIOError(e:IOErrorEvent):void { 
    soundFile2exist = null; 
} 

function otherFunction():void { 
    trace (soundFile2exist); 
} 

在其他情況下,一類static variables可以用在全局變量的位置。

+0

嗯......我試過這個,它看起來和第二個跟蹤返回「undefined」,而不是「null」 – user547794

+0

對不起,我的示例代碼中有一個錯誤,我有onIOError函數中的「var soundFile2exist = null」 ,使其成爲該函數的局部變量。我編輯了這個例子,現在它應該會更好。 –

+1

upvote,因爲這是問題的最佳答案,但我不推薦這種編程方式。時間軸代碼幾乎總是一個壞主意(AS2在這方面更糟糕,因爲它需要它;至少在AS3中,您不能*在時間軸上放置代碼)。 – jhocking

1

最常見的方法是創建一個Singleton類,然後您可以從任何地方引用它。這基本上建立了一個類,在這個類中只有通過一個只返回一個實例的受控靜態方法才能訪問該類的實例。所以,只要你說MySingleton.getInstance(),你總是會得到相同的對象。

格蘭特斯金納對如何在AS3實現一個Singleton快速新手必看:http://gskinner.com/blog/archives/2006/07/as3_singletons.html

+0

如果我的代碼不在包中,有沒有辦法做到這一點? – user547794

+0

您的代碼不在包中的問題的明顯解決方案是將其放入包中。你有什麼理由不能這樣做? – jhocking

+0

順便說一下,我不想低調投票回答這個問題,因爲我偶爾會使用Singletons,但是我學到了很多關於Singletons的缺點,並且一旦我開始使用依賴注入,我發現我根本不需要Singletons。 – jhocking

相關問題