2010-07-14 99 views
0

在這種情況下,我正在使用URLLoader和URLRequest。使用AS3,我應該只在需要時聲明全局變量或函數內的變量嗎?

我有兩個按鈕。一個偵聽鼠標單擊事件,然後運行下面的函數(更少的代碼並不適用於這個問題):

function loadURL (e:MouseEvent):void { 

    .... 

    var myRequest:URLRequest=new URLRequest("*URL*"); 
    myRequest.method=URLRequestMethod.POST; 
    myRequest.data=postVars; 

    var myLoader:URLLoader = new URLLoader(); 
    myLoader.load(myRequest); 

    .... 

} 

其他按鈕,點擊後,調用另一個函數,說resetAll,這則重置「會議「通過清除所有當前變量並取消當前正在進行的任何操作。在該功能中,我想呼叫myLoader.close(myRequest);,但myLoader不能從resetAll內訪問。

在這種情況下,即使我不需要它們,我是否應該在函數的外部聲明var myRequest:URLRequest=new URLRequest("*URL*");var myLoader:URLLoader = new URLLoader();

我想我在這裏錯過了AS3的一些常識知識,但不知道它是什麼。如果有人能夠在這種情況下填補我的最佳做法,我將不勝感激。

回答

2

您可以全局聲明URLLoader變量並使用本地聲明或URLRequest變量。

URLRequest是無論如何,你必須重新創建每一個新的請求,在本地聲明他們會更安全的GC收集它使用後更安全。

URLLoader不會每次都創建,您可以在每次要從服務器加載內容時將新的URLReqest對象傳遞給Load方法。

0

如果該函數只執行一次,則可以使用函數內部的變量。如果這個函數在應用程序的生命週期中多執行一次,則應該聲明變量一次,然後只重新配置或重新實例化它們。另一件事,如果你需要在函數外部使用這些變量,那麼你當然應該在全局聲明它們。 (resetAll)

+0

謝謝你的回答。 「如果這個功能只執行一次」是什麼意思? – Structure 2010-07-14 08:03:10

+0

如果在您的應用程序中執行此功能是一次性的(例如創建完成) 如果在用戶請求或其他應用程序邏輯中重複執行此功能,則應使用全局變量。 – KensoDev 2010-07-14 09:07:10

0

在某些情況下,關閉非常有用。 (特別是處理事件或控制異步代碼。) 您可以一次保留局部變量的所有引用。 但是,當函數中閉包的源代碼變得很大時,應該考慮將它們移動到另一個類中。

下面是一個例子你可能會認爲

Closure Example - wonderfl build flash online

一件事是關閉的成本。 執行關閉成本比平常的代碼要多得多,但對於有序情況來說它是微不足道的。