मैं चेतावनी देख रहा हूं कि जावास्क्रिप्ट में वैश्विक चर का उपयोग न करें, लेकिन ऐसा लगता है कि लोगों का कहना है कि वैश्विक नामस्थान क्लोज़ का कारण है। मैं कल्पना कर सकता हूं कि यह सभी चर को एक बड़ी वस्तु में डालकर आसानी से तय किया जा रहा है। अब सवाल यह है कि क्या सुविधा के अलावा वैश्विक चर का उपयोग न करने के अन्य कोई कारण हैं? क्या उनके साथ कोई प्रदर्शन या संगतता समस्याएं शामिल हैं?वैश्विक चर क्यों खराब अभ्यास माना जाता है?
उत्तर
वे वैश्विक नामस्थान को अव्यवस्थित करते हैं और स्थानीय चर से देखने के लिए धीमे होते हैं।
सबसे पहले, कई वैश्विक चर होने के कारण हमेशा एक बुरी चीज होती है क्योंकि यह भूलना आसान है कि आपने कहीं एक चर घोषित किया है और गलती से इसे कहीं और घोषित कर दिया है। यदि आपका पहला चर स्थानीय था तो आपको कोई समस्या नहीं है। यदि यह वैश्विक था, तो यह अभी अधिलेखित हो गया। जब आप अंतर्निहित ग्लोबल्स (जब आप someVar = someValue
कहते हैं तो var
कीवर्ड के साथ कुछ वार घोषित किए बिना यह भी बदतर हो जाता है)।
दूसरा, वैश्विक चरों को जावास्क्रिप्ट के लिए स्थानीय चर से "ढूंढने" के लिए अधिक समय लगता है। गति में अंतर बहुत बड़ा नहीं है, लेकिन मौजूद है।
आगे पढ़ने और ग्लोबल्स को खराब अभ्यास क्यों माना जाता है, इसकी गहराई से स्पष्टीकरण के लिए, आप this page देख सकते हैं।
असल में, क्योंकि उन्हें पृष्ठ पर किसी भी स्क्रिप्ट से एक्सेस किया जा सकता है और क्योंकि आप उसी नाम में इसका नाम दोहरा सकते हैं। अपनी स्क्रिप्ट बहुत लंबा है और आप कार्यों के बहुत सारे से इन चर का उपयोग यह वैश्विक चर के मूल्य के बाद से अपने डिबगिंग समय बढ़ जाएगा
(function(){
var foo = 'foo',//Local
bar = 'bar';//Local
window.globalVar = foo + bar;//Global
})();
alert(foo);//Error
alert(bar);//Error
alert(globalVar);//'foobar'
तो बदल दिए गए हैं सकता है: यही कारण है कि जावास्क्रिप्ट इंजन का एक बहुत इस कोड का उपयोग है कहीं से भी यदि आप ट्रैकिंग कर रहे हैं कि यह एक गैर-अपेक्षित मूल्य में बदल गया है तो आपको उन सभी को जांचना होगा।
यह परिदृश्य और भी दर्दनाक है यदि विभिन्न प्रोग्रामर इस पृष्ठ को आपके पृष्ठ में शामिल अन्य स्क्रिप्ट से संशोधित करते हैं।
हार्डर डीबगिंग केवल एक कारण है कि ग्लोबल्स खराब क्यों हैं। अन्य सूचीबद्ध हैं [ग्लोबल्स इतने बुरे क्यों हैं] (http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil/148154#148154)। –
वहाँ अपने कोड में वैश्विक चर का उपयोग कर जब तक आप उन्हें एक uniqe namespase/ऑब्जेक्ट के अंदर लपेटकर कर रहे हैं (स्क्रिप्ट जो आपके नहीं हैं के साथ टकराव से बचने के लिए)
में से एक adventage नहीं है किसी भी समस्या नहीं होनी चाहिए जावास्क्रिप्ट में वैश्विक चर का उपयोग करके, और यह इस तथ्य से निकला है कि जावास्क्रिप्ट एक मजबूत प्रकार की भाषा नहीं है। वहां, यदि आप जटिल कार्यों को किसी फ़ंक्शन के तर्क के रूप में पास करते हैं, तो आप उन ऑब्जेक्ट्स (फ़ंक्शन स्कोप के अंदर) के लिए सभी इंटेलिजेंस खो देंगे, इसके बजाय वैश्विक ऑब्जेक्ट्स का उपयोग करते समय, उस इंटेलिजेंस को सुरक्षित रखेंगे। और जब आपके पास इंटेलिजेंस होता है, तो यह वास्तव में डिबगिंग समय में सुधार कर सकता है (जैसा कि दूसरों ने कहा था ...)
मुझे व्यक्तिगत रूप से यह बहुत उपयोगी लगता है और यह निश्चित रूप से मेरे कोड में है।
(बेशक, एक alwayse स्थानीय लोगों और वैश्विक चर के बीच सही संतुलन बनाना चाहिए)
वैश्विक चर काफी युग्मन बढ़ा सकते हैं, काफी scalability और अपने कोड की testability कम कर देता है। एक बार जब आप ग्लोबल्स का उपयोग करना शुरू कर देते हैं, तो अब आपको पता होना चाहिए कि चर कहां और कैसे संशोधित किया गया है (यानी ब्रेकिंग encapsulation)। वहां के अधिकांश साहित्य और सम्मेलनों का तर्क होगा कि ग्लोबल्स का उपयोग करते समय प्रदर्शन आपकी कम से कम चिंता का विषय है।
यह fantastic article outlining why वैश्विक चर के कारण सिरदर्द का कारण बनता है।
यह सबसे अच्छा जवाब है। –
संक्षेप में, वैश्विक चर निम्नलिखित मुद्दों का कारण बनते हैं (और अधिक)।
1) परिवर्तनीय नामकरण टकराव - यदि आप एक टीम पर काम कर रहे हैं और दोनों स्वयं और आपके सहकर्मी वैश्विक दायरे पर समान वैरिएबल नाम का उपयोग करते हैं, तो अंतिम परिभाषित वैरिएबल प्रारंभिक चर को ओवरराइट करेगा। यह स्पष्ट विनाशकारी परिणाम हो सकता है।
2) सुरक्षा - विशेष रूप से वेब पर, प्रत्येक उपयोगकर्ता को विंडो (या वैश्विक) ऑब्जेक्ट तक पहुंच होती है। वैश्विक दायरे पर चर डालने से, आप किसी भी उपयोगकर्ता को अपने चर को देखने या बदलने की क्षमता देते हैं।
3) धीमा - यह तर्कसंगत नगण्य है, लेकिन यह अभी भी मौजूद है। जावास्क्रिप्ट परिवर्तनीय लुकअप काम जिस तरह से जावास्क्रिप्ट इंजन वर्तमान क्षेत्र पर एक लुकअप करेगा, वैरिएबल को देखा जा रहा है। अगर इसे नहीं मिल रहा है, तो यह अगले माता-पिता के दायरे पर एक नज़र डालेगा। यदि इसे वहां नहीं मिला है, तो यह उस चर के लिए देखे जाने वाले वैश्विक ऑब्जेक्ट तक पहुंचने तक ऊपर की तरफ देखेगा। यदि आपके सभी चर वैश्विक दायरे पर स्थित हैं, तो जावास्क्रिप्ट इंजन को चर को खोजने के लिए अंततः वैश्विक दायरे तक पहुंचने के लिए प्रत्येक दायरे से गुजरना होगा।
- 1. लॉजिकल ऑपरेटर ओवरलोडिंग खराब अभ्यास माना जाता है?
- 2. आउटपुट बफरिंग का उपयोग खराब अभ्यास माना जाता है?
- 3. जावास्क्रिप्ट में खराब अभ्यास माना जाता है के साथ '(सूची में var आइटम)' क्यों है?
- 4. वैश्विक चर के "शुद्ध/http" के उपयोग को गोलांग में एक अच्छा अभ्यास माना जाता है?
- 5. वर्डप्रेस को खराब प्रोग्राम क्यों माना जाता है?
- 6. नकारात्मक आईडी या शून्य को खराब अभ्यास क्यों माना जाता है?
- 7. स्थिर ओओ अभ्यास क्यों नहीं माना जाता है?
- 8. परिपत्र संदर्भ क्यों हानिकारक माना जाता है?
- 9. क्या डॉलर ऑपरेटर ($) खराब फॉर्म माना जाता है? क्यूं कर?
- 10. strtok क्यों है() असुरक्षित माना जाता है?
- 11. क्यों -compile (export_all) खराब अभ्यास है?
- 12. क्या यह इकाई निकाय के बिना HTTP पोस्ट करने के लिए खराब अभ्यास माना जाता है?
- 13. आईफोन, isKindOfClass का उपयोग किसी भी तरह से खराब अभ्यास माना जाता है?
- 14. ईको के साथ HTML आउटपुट PHP में खराब अभ्यास माना जाता है?
- 15. क्या यह गैर-मानक HTML विशेषताओं का उपयोग करने के लिए खराब अभ्यास माना जाता है?
- 16. वैश्विक चर और एमपीआई
- 17. स्कैला में टाइप स्टाइल और टाइप कैस्ट को खराब शैली क्यों माना जाता है?
- 18. जावा बाइटकोड "अत्यधिक" संख्या को "खराब" कोड माना जाता है?
- 19. enums क्यों यौगिक प्रकार माना जाता है?
- 20. ओएस धागे महंगा क्यों माना जाता है?
- 21. रेडिस सीपी क्यों माना जाता है?
- 22. एसक्यूएल सर्वर में कर्सर का उपयोग करने के लिए इसे बुरा अभ्यास क्यों माना जाता है?
- 23. एक परिवर्तनीय वस्तु पर लॉक करना - इसे एक बुरा अभ्यास क्यों माना जाता है?
- 24. संरक्षित रचनाकारों को अच्छा अभ्यास माना जाता है?
- 25. एक्शन.इनवोक का उपयोग कर सबसे अच्छा अभ्यास माना जाता है?
- 26. यूआरएल पोस्ट खराब खराब अभ्यास एनकोडेड?
- 27. अप्रयुक्त चर क्यों खराब हैं?
- 28. PKG_CHECK_MODULES हानिकारक माना जाता है?
- 29. वैश्विक चर वैश्विक क्षेत्र
- 30. जावास्क्रिप्ट क्यों है: शून्य (0) हानिकारक माना जाता है?
संभावित डुप्लिकेट [ग्लोबल्स खराब क्यों हैं?] (Http://stackoverflow.com/questions/4246284/why-are-globals-bad) और [अन्य प्रश्न] (http://stackoverflow.com/search? q = जावास्क्रिप्ट + क्यों + वैश्विक + चर + बुरा + कर रहे हैं)। –
जावास्क्रिप्ट या अन्य भाषाओं, कम मायने रखता है। यहां [कैनोलिक जवाब क्यों है कि ग्लोबल्स खराब क्यों हैं] (http://programmers.stackexchange.com/questions/148108/why-is-global-state-so-evil/148154#148154)। –