दिलचस्प पोस्ट
पाइप (|) और कैरेट (^) विशेषता चयनकर्ताओं के बीच अंतर क्या है? मैटैब में आकृति को स्वचालित रूप से अधिकतम करें ट्विटर उपयोगकर्ता नाम के लिए regex कोर ग्राफिक्स वस्तुओं के साथ एआरसी काम करता है? सी में सॉकेट्स के माध्यम से एक संरचना उत्तीर्ण करना एंड्रॉइड एप्लिकेशन के साथ एसडीसीडी पर एक फ़ाइल का नाम कैसे बदलें? एक प्रोटोकॉल में केवल-प्राप्त संपत्ति की आवश्यकता क्यों नहीं है, जो एक संपत्ति से संतुष्ट होती है? मैं वी 8 द्वारा उत्पन्न मशीन कोड कैसे देख सकता / सकती हूं? स्काला 2.8 CanBuildFrom आईओएस: NSUserDefaults में एक बूलीयन का उपयोग करें एंड्रॉइड में इंटेन्ट स्रोत कैसे ढूंढें? GitHub से सीधे एनपीएम पैकेज कैसे स्थापित करें? गतिविधि स्टार्टअप पर एक ScrollView में नीचे स्क्रॉल कैसे करें MySQL: कई तालिकाओं या कई डेटाबेस? कैसे सी + + संदर्भ देखो, स्मृति-वार?

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

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

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

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

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

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

@ मिप्लुंजान ने 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 केवल स्थानीय एक एकल लूप