2011-08-12 10 views
11

प्रश्न int a[] = {1,2,}; Weird comma allowed. Any particular reason? से प्रेरित है, मुझे एडोब की एक्शनस्क्रिप्ट में सिंटैक्स से संबंधित एक प्रश्न याद आया।क्रियालेख: घोषित होने से पहले एक चर निर्दिष्ट करना क्यों संभव है?

किसी कारण (कम से कम फ्लेक्स 3 में) यह संभव है एक चर को कोई मान निर्दिष्ट करने के लिए इससे पहले कि यह घोषित किया गया था:

public function foo() : void { 
     a = 3; 
     var a : int = 0; 
} 

इस कोई मतलब है ..? क्या यह एडोब फ्लेक्सबिल्डर कंपाइलर में एक बग है? या यह पुरानी Ecmascript संस्करणों के लिए शायद कुछ विरासत के कारण है?

उत्तर

17

ब्लॉक स्तर गुंजाइश की कमी की एक दिलचस्प निहितार्थ यह है कि आप पढ़ सकते हैं या इससे पहले कि यह, घोषित किया जाता है जब तक समारोह समाप्त होता है से पहले के रूप में यह घोषित किया जाता है एक चर करने के लिए लिख सकते हैं। यह hoisting नामक एक तकनीक के कारण है, जिसका मतलब है कि संकलक सभी चरम घोषणाओं को समारोह के शीर्ष पर ले जाता है। उदाहरण के लिए, निम्न कोड को संकलित करता है, भले ही संख्या चर के लिए प्रारंभिक ट्रेस() फ़ंक्शन से पहले संख्या चर घोषित किया जाता है होता है ...

Actionscript 3.0 Docs - Variables

+0

+1। बहुत ही रोचक। मुझे इसके बारे में पता नहीं था। – TheDarkIn1978

+0

सहायता के लिए धन्यवाद – paqogomez

3

जहां तक ​​मुझे पता है कि यह फ्लैश वर्चुअल मशीन की विशेषता है जो फ़ंक्शन के शरीर निष्पादन से पहले सभी फ़ंक्शन के चर घोषित करता है (स्मृति आवंटित करता है)। तो एक्शनस्क्रिप्ट कोड में फ़ंक्शन ब्लॉक में कहीं भी वैरिएबल घोषित करना केवल परिवर्तनीय घोषित करने के लिए कंपाइलर की रिपोर्ट करता है और यह रनटाइम पर फ़ंक्शन ब्लॉक की शुरुआत में घोषित करता है। जब आप समारोह के शरीर में दो बार कुछ चर घोषित

public function foo() : void { 
     var a : int = 3; 
     a = 0; 
} 

इसी कारण संकलक चेतावनी है: क्यों अपने कोड में ही है के रूप में ऐसा इसलिए है।

+0

आप दोनों को धन्यवाद! हालांकि यह मेरे लिए थोड़ा अजीब लगता है, मुझे अंततः –

+0

@ मिस्टर हेन्सन का कारण पता है, तो आपको एक जवाब स्वीकार करना चाहिए, जब तक कि आप कुछ बेहतर इंतजार नहीं कर रहे हों :) – Peter

+0

@ पीटर: आह ठीक है, मैं देख रहा हूं, thx मैं अभी भी हूँ सीखना;) –

संबंधित मुद्दे

 संबंधित मुद्दे