दिलचस्प पोस्ट
ब्लैकबेरी – कैसे छवि का आकार बदलना है? Gmail का उपयोग करके PHP मेल कक्षा android.support.v7.widget.Toolbar बढ़ती त्रुटि? सीएसएस नकली तत्वों के साथ काम क्यों करता है? कीबोर्ड और कर्सर शो, लेकिन मैं UITextFields और UITextViews के अंदर टाइप नहीं कर सकता आपको जेफ्राम और अन्य घटकों का विस्तार क्यों नहीं करना चाहिए? पेपरक्लिप अपवाद: पेपरक्लिप :: एडाप्टरराइजिस्ट्री :: नोहैंडलर एरर कॉलिंग थ्रेड एसटीए होना चाहिए, क्योंकि कई यूआई घटकों को यह आवश्यकता है बहिष्कृत एसवीजी पथ एसईजीएलआईस्ट के लिए वैकल्पिक उपप्रक्रिया का उपयोग करके अजगर स्क्रिप्ट में इनपुट के साथ अजगर स्क्रिप्ट को कॉल करें \ w और \ b नियमित अभिव्यक्ति मेटा वर्णों में अंतर जावास्क्रिप्ट बंद – चर का गुंजाइश सवाल मुझे ईएस 6 आयात के लिए कुरकुरा ब्रेसिज़ का उपयोग कब करना चाहिए? सिद्धांत 2 के साथ कैस्केड हटाएं सन्देश संदेश द्वारा जीआईटी रिपॉजिटरी खोज कैसे करें?

ब्लॉक स्कोप मूल रूप से जावास्क्रिप्ट में लागू क्यों नहीं किया गया था?

मैंने पढ़ा है, और अपने अनुभव के माध्यम से पता लगाया है कि जावास्क्रिप्ट में ब्लॉक स्कोप नहीं है यह मानते हुए कि भाषा इस कारण से एक कारण के लिए तैयार की गई थी, इसका कारण क्या है?

मैंने Google और यहाँ पर चारों ओर देखा है, लेकिन जिन पदों को मैंने मिल चुका है, बस दोबारा पता चला है कि जेएस के पास कार्य गुंजाइश है और ब्लॉक का दायरा नहीं है, यह बताए बिना क्यों। मैं यह जानने के लिए उत्सुक हूं कि यह वास्तव में मामला क्यों है

वेब के समाधान से एकत्रित समाधान "ब्लॉक स्कोप मूल रूप से जावास्क्रिप्ट में लागू क्यों नहीं किया गया था?"

जवाब देने के लिए मेरी टिप्पणी परिवर्तित करना

निर्माता की पसंद: मैंने ब्रेंडन को ट्वीट किया और निम्नलिखित उत्तर मिला:

@ मिप्लुंजान ने 10 दिनों के ब्लॉक स्कोप के लिए समय नहीं छोड़ा। इसके अलावा 90 के मध्य युग के कई "स्क्रीटिंग भाषा" में कुछ स्कोप थे और बाद में इसे और अधिक बढ़ाया गया।


उस ने कहा, यहां कुछ प्रासंगिक बिंदु हैं:

  • ब्लॉक कथन

महत्वपूर्ण: जावास्क्रिप्ट ब्लॉक स्कोप नहीं है एक ब्लॉक के भीतर पेश किए गए चर को युक्त फ़ंक्शन या स्क्रिप्ट में स्कॉच किया जाता है, और उन्हें सेट करने के प्रभाव को ब्लॉक से बाहर जारी रहना पड़ता है। दूसरे शब्दों में, ब्लाक स्टेटमेंट्स एक क्षेत्र नहीं पेश करते हैं। हालांकि "स्टैंडअलोन" ब्लॉकों वैध सिंटैक्स हैं, लेकिन आप जावास्क्रिप्ट में स्टैंडअलोन ब्लॉकों का उपयोग नहीं करना चाहते हैं, क्योंकि वे ऐसा नहीं करते जो आपको लगता है कि वे करते हैं, अगर आपको लगता है कि वे ऐसे ब्लॉक या सी या जावा में कुछ भी करते हैं

  • एक वैकल्पिक हल

हम कृत्रिम रूप से नए कार्यों को बनाने और तुरंत उन्हें लागू करने से scopes परिचय कर सकते हैं

  • ECMAScript 2015 (ES6)

घोषित ब्लॉक की शुरुआत में घोषित चर को फहराया नहीं गया है। इसलिए, एक घोषित वैरिएबल को संदर्भित करने से पहले इसका मान संदर्भ संदर्भ बढ़ाता है।

एक ही ब्लॉक स्कोप में एक ही वेरिएबल के रीडकेयरेशन ने सिंटैक्स एरर उठाया है।

निम्न कारणों से ब्लॉक स्कोप लागू नहीं किया गया था:

  1. यह भाषा को लागू करना आसान बनाता है जावास्क्रिप्ट शुरू में इंटरैक्टिव वेब अनुप्रयोगों के लिए एक भाषा के रूप में डिजाइन किया गया था। इसलिए इसे छोटा और कार्यान्वित करना आसान होना चाहिए।
  2. ब्लॉक स्कोप जावास्क्रिप्ट की तरह गतिशील भाषाओं में एक प्रदर्शन हिट दर्ज करता है। इसका कारण यह है कि जब आप कुछ वेरिएबल तक पहुंचने का प्रयास करते हैं जो वर्तमान स्कोप में नहीं है, तो जावास्क्रिप्ट पहले वर्तमान गुंजाइश की जांच करता है, फिर माता-पिता के दायरे और इतने पर जब तक यह चर को पाता है या अंत तक पहुंचता है। इसलिए ब्लॉक स्कोप की शुरूआत में लूप और नेस्टेड लूप्स में चर का उपयोग बहुत धीमा होगा।
  3. ब्लॉक स्कोप की कमी कार्यक्रमों को लिखना आसान बनाता है। उदाहरण के लिए कहते हैं कि आप केवल एक चर बनाना चाहते हैं यदि एक निश्चित स्थिति सही है आपको जावास्क्रिप्ट में करने की ज़रूरत है, if एक बयान के भीतर वैरिएबल को घोषित और परिभाषित करता है। सी जैसी भाषाओं में आपको if बयान के बाहर चर को घोषित करना होगा और if बयान के भीतर इसे परिभाषित करना होगा।
  4. ब्लॉक स्कोप की कमी के कारण घोषणाओं को फहराया जा सकता है। फ़ंक्शन घोषणाओं के मामले में यह विशेष रूप से उपयोगी है। उदाहरण के लिए यह बेला देखें: http://jsfiddle.net/L6SgM/ (ध्यान दें कि यह उदाहरण फ़ायरफ़ॉक्स में काम नहीं करता है)।
  5. चूंकि जावास्क्रिप्ट प्रथम श्रेणी समारोह अभिव्यक्ति का समर्थन करता है इसलिए हमें ब्लॉक स्कोप की आवश्यकता नहीं है। उन्हें तत्काल क्रियान्वित समारोह अभिव्यक्तियों का उपयोग करके सिम्युलेटेड किया जा सकता है।

2015 के रूप में नया उत्तर। ईएस 6 में कीवर्ड के साथ चर परिभाषा के लिए ब्लॉक स्कोप है।

कई कारण हैं, लेकिन जो कुछ आते हैं वे पार्सिंग / डिबगिंग कोड में सहायता करते हैं जो ऑब्जेक्ट लिटरल का उपयोग करता है (जो कभी-कभी एक ब्लॉक की तरह दिख सकता है), और स्थानीय चर के कचरा संग्रह को आसान बनाने के लिए।

मुझे उम्मीद है कि वादा किया गया समर्थन (उदाहरण के लिए, उदाहरण के तौर पर, http://esdiscuss.org/notes/2012-07-25 ) पर चर्चा की जा सकती है क्योंकि वास्तविक होने के कारण यह चर का उपयोग करने के लिए बहुत सुविधाजनक होगा जैसे कि i केवल स्थानीय एक एकल लूप