जावास्क्रिप्ट लहरा चर क्यों करता है?
जब उन्होंने उत्थापन को लागू करने का निर्णय लिया तो डिजाइनरों का औचित्य क्या था? क्या कोई अन्य लोकप्रिय भाषाएं हैं जो ऐसा करती हैं?
कृपया प्रलेखन और / या रिकॉर्ड के लिए प्रासंगिक लिंक प्रदान करें।
जावास्क्रिप्ट लहरा चर क्यों करता है?
जब उन्होंने उत्थापन को लागू करने का निर्णय लिया तो डिजाइनरों का औचित्य क्या था? क्या कोई अन्य लोकप्रिय भाषाएं हैं जो ऐसा करती हैं?
कृपया प्रलेखन और / या रिकॉर्ड के लिए प्रासंगिक लिंक प्रदान करें।
div
जवाबों:
जैसा कि Stoyan Stefanov "जावास्क्रिप्ट पैटर्न" पुस्तक में बताते हैं, उत्थापन जावास्क्रिप्ट दुभाषिया कार्यान्वयन का परिणाम है।
जेएस कोड व्याख्या दो पासों में की गई। पहले पास के दौरान, दुभाषिया चर और फ़ंक्शन घोषणाओं को संसाधित करता है।
दूसरा पास वास्तविक कोड निष्पादन कदम है। दुभाषिया प्रक्रियाएं अभिव्यक्तियों और अघोषित चर का कार्य करती हैं।
इस प्रकार, हम इस तरह के व्यवहार का वर्णन करने के लिए "उत्थापन" अवधारणा का उपयोग कर सकते हैं।
"var hoisting इस प्रकार था [a] फंक्शन उत्थापन का अनायास परिणाम, कोई ब्लॉक स्कोप नहीं, [और] JS को 1995 की भीड़ की नौकरी के रूप में।"
"फंक्शन उत्थापन, टॉप-डाउन प्रोग्राम अपघटन की अनुमति देता है, 'आरईसी' को मुफ्त में, घोषणा से पहले कॉल करें;
मैं किसी भी अन्य लोकप्रिय भाषाओं के बारे में नहीं जानता जो एक ही तरीके से चर को फहराती हैं। मुझे लगता है कि एक्शनस्क्रिप्ट - फ्लैश डेवलपमेंट में उपयोग किए जाने वाले ईसीएमएस्क्रिप्ट का एक और कार्यान्वयन - उत्थापन लागू नहीं हुआ। यह उन अन्य भाषाओं से परिचित डेवलपर्स के लिए भ्रम और हताशा का स्रोत रहा है जो जावास्क्रिप्ट सीख रहे हैं।
अद्यतन: टिप्पणियों से, पायथन में समान चर उत्थापन व्यवहार होता है ।
इसका कारण यह है कि जावास्क्रिप्ट इंटरप्रेटर दो चक्रों में कोड की व्याख्या करता है।
1 चक्र में सभी चर और समारोह घोषणाओं समारोह गुंजाइश उस में निष्पादित हो रहा है के शीर्ष पर ले जाया जाता है। ऐसा बनाने में मदद करता है variableObjects
के लिए execution context
भी यह को फांसी से पहले समारोह का।
दूसरे चरण में, मूल्य असाइनमेंट, कोड स्टेटमेंट और फ़ंक्शन कॉल अपेक्षित तरीके से लाइन द्वारा जगह लेते हैं।
आपने यहाँ पर थोड़ा और विस्तृत पढ़ा है।
यह आप व्यवहार के चारों ओर एक बेहतर तस्वीर दे देंगे let
, const
और class
घोषणाओं, भी पूर्वता यह चर और कार्यों के बीच इस प्रकार है।