2009-02-24 5 views
7

जावास्क्रिप्ट में हमें इसका उपयोग करने से पहले var कीवर्ड के साथ एक चर घोषित करने की आवश्यकता नहीं है। हम सीधे myCount = 12; या myStr = "Hello"; जैसी चीजें कर सकते हैं (जहां MyCount, myStr पहले घोषित नहीं किया गया है)। ऐसा कोई भी उपयोग, 'वैश्विक' दायरे में चर घोषित करता है और आरंभ करता है।इसका उपयोग करने से पहले जावास्क्रिप्ट में एक चर घोषित करना क्यों जरूरी नहीं है?

इस सुविधा को प्रदान करने के कारण क्या हो सकते हैं? और क्या यह बिल्कुल अच्छा मानक है?

अद्यतन: मेरा प्रश्न यह नहीं है कि 'घोषित किए बिना एक चर का उपयोग करके' और 'घोषित करने और फिर उपयोग करने' और यह कैसे गुंजाइश को प्रभावित करता है।

मेरा प्रश्न यह है कि 'जावास्क्रिप्ट में इसे बिना किसी घोषणा के सीधे एक चर का उपयोग करने की अनुमति क्यों है' क्योंकि अधिकांश प्रोग्रामिंग भाषाओं पर इसकी सख्त जांच होती है।

अद्यतन: मुझे इस उद्धरण के खराब प्रभाव के रूप में निम्न उद्धृत पाठ दिखाई देता है। तो, यह सुविधा बिल्कुल क्यों है?

"मान लीजिए वहाँ है एक विश्व स्तर पर घोषित चर x (var x="comparison string") पहले से ही जो मैं के बारे में पता है और कर रहा हूँ बनाने के इरादे से मैं अपने वैश्विक 'एक्स' के अंदर अपने कार्यों में से एक को प्रारंभ एक (x=-1) और वहाँ मैं अंत तोड़ने अन्य कार्यशीलता।

तो, वहाँ कोई भी अच्छा कारण यह कुछ चीजें मैं वास्तव में जे एस के बारे में नापसंद में से एक है एक के बारे में सोच नहीं सकता है? इस सुविधा होने के लिए?

+0

घपला उस तरह का पता लगाने के लिए Crockford के JSLint के माध्यम से अपने जे एस कोड डालने के लायक - उस पर और दूसरों :) – Kristen

+0

(माफ करना, मैं सराहना कि आपके सवाल का जवाब नहीं है, यह सिर्फ एक सुझाव था) – Kristen

+0

और एक अच्छा सुझाव । :) – Magnar

उत्तर

12

जावास्क्रिप्ट ब्राउज़र में बहुत ही सरल स्क्रिप्ट के लिए था। परिवर्तनीय घोषणाओं की आवश्यकता अनावश्यक लग रही थी।

बेशक, यह भाषा में एक त्रुटि है। और जावास्क्रिप्ट के निर्माताओं को पता है कि। वे इसे बदलना चाहते थे। लेकिन वे नहीं कर सका। क्यूं कर?

क्योंकि माइक्रोसॉफ्ट पहले ही जावास्क्रिप्ट इंजीनियर कर चुका था और बग और सभी के साथ अपनी डुप्लिकेट जेस्क्रिप्ट बनाया था। माइक्रोसॉफ्ट ने किसी भी बदलाव को भी खराब कर दिया, यहां तक ​​कि बगफिक्स, क्योंकि वे किसी भी स्क्रिप्ट को तोड़ने के बारे में अशिष्ट थे। तो अगर वे जावास्क्रिप्ट बदल गए, तो आईई में जेस्क्रिप्ट भी वही रहेगा।

यह एक अच्छा कारण नहीं है। लेकिन यह हमारे पास है।

स्रोत: मुझे डगलस क्रॉकफोर्ड से मेरा जावास्क्रिप्ट इतिहास वर्ग मिला: "जावास्क्रिप्ट प्रोग्रामिंग भाषा", http://video.yahoo.com/watch/111593/1710507 कहानी का यह हिस्सा वीडियो में 9 और 11 मिनट के बीच है।

+1

गले लगाओ। बढ़ाएँ। बुझाने। – annakata

+0

वास्तव में एक दुखद कारण है। एक अवांछित सुविधा जिसे हम देखते हैं और बाद में उपयोग करते हैं। –

+0

मुझे लगता है कि आपका जवाब है। यह देखने का इंतजार है कि कोई और कुछ जानता है या नहीं। तब तक एक आप के लिए वोट। –

4

अच्छा कारणों? सच में,।

यह संभव है क्योंकि सब कुछ होता है वैश्विक दायरे में अगर अन्यथा नियंत्रित नहीं किया जाता है और जेएस इस तरह के निहित परिवर्तनीय निर्माण की अनुमति देता है। इसकी लागत बग और प्रदूषण को कम करने के लिए बहुत बड़ी संभावना है, और केवल लाभ यह है कि "यह" स्पष्ट रूप से आत्मनिर्भरता को परिभाषित करने के लिए मौजूद है और वैश्विक संदर्भ के लिए "विंडो" और "दस्तावेज़" मौजूद है, कुछ पात्रों को बचा रहा है - जो कोई कारण नहीं है बिलकुल।

+0

हाँ, बिल्कुल मेरा बिंदु। मान लीजिए कि पहले से ही एक वैश्विक रूप से घोषित चर 'एक्स' है जिसे मैं अनजान हूं और मैं अपने काम के अंदर अपना खुद का वैश्विक 'एक्स' बनाने के इरादे से एक शुरू करता हूं और वहां मैं अन्य कार्यक्षमता को तोड़ देता हूं। क्या कोई अच्छा कारण है? –

+0

जैसा कि मैंने कहा, अगर कोई है तो यह मेरे बाहर है। बेहतर ब्रेंडन से पूछो। – annakata

+0

ठीक है। kewl। मुझे उम्मीद है कि ब्रेंडन इस धागे से गुजरता है। –

1

मेरा प्रश्न है 'जावास्क्रिप्ट में इसे बिना किसी घोषणा के सीधे एक चर का उपयोग करने की अनुमति क्यों है' क्योंकि अधिकांश प्रोग्रामिंग भाषाओं पर इसकी सख्त जांच होती है।

यह स्थिर और गतिशील रूप से टाइप की गई भाषाओं के बीच अंतर है। जावास्क्रिप्ट गतिशील रूप से टाइप किया गया है, इसलिए पहले घोषित करने की कोई आवश्यकता नहीं है। जैसा कि अन्य उत्तरों में बताया गया था, var कीवर्ड इसकी घोषणा के मुकाबले एक चर के दायरे के लिए ज़िम्मेदार है।

और मुझे नहीं लगता कि अधिकतर प्रोग्रामिंग भाषाएं उस पर एक जांच है।

+0

हाँ, लेकिन, यह बड़ी मदद के कारण समस्याओं का कारण बनता है। –

+0

स्वचालित रूप से स्वचालित चर (हैकेल?) के साथ टाइप किए गए हैं और उनके बिना गतिशील रूप से टाइप किए गए हैं (योजना?) – Javier

+0

@ChanLFC: उदाहरण के लिए? उदाहरण के लिए – SilentGhost

0

क्योंकि यह एक पटकथा भाषा है। तथ्य बच्चे और इस तरह यह डिजाइन किया गया था!

1

Lua एक समान समस्या है: कोई गैर-घोषित चर डिफ़ॉल्ट रूप से वैश्विक है। मेलिंग सूची में यह एक आवर्ती विषय है, पूछना कि यह 'डिफ़ॉल्ट रूप से स्थानीय' क्यों नहीं होना चाहिए। दुर्भाग्य से, यह भाषा में बहुत ही अजीब अस्पष्टताएं पेश करेगा, इसलिए निष्कर्ष आम तौर पर "डिफ़ॉल्ट रूप से वैश्विक खराब है, डिफ़ॉल्ट रूप से स्थानीय खराब है"

+0

ठीक है, डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से कुछ भी क्यों है? यदि इसमें कोई भिन्न कीवर्ड संलग्न नहीं है और पहले घोषित नहीं किया गया है तो एक त्रुटि फेंक दें। सरल :-) –