2013-02-21 15 views
52

जावास्क्रिप्ट चरम चर क्यों करता है?जावास्क्रिप्ट उछाल चर क्यों करता है?

डिजाइनरों का तर्क क्या था जब उन्होंने उत्थान को लागू करने का निर्णय लिया था? क्या कोई अन्य लोकप्रिय भाषाएं हैं जो यह करती हैं?

कृपया दस्तावेज़ीकरण और/या अभिलेखों के लिए प्रासंगिक लिंक प्रदान करें।

+1

["क्योंकि जावास्क्रिप्ट में वास्तव में लेक्सिकल स्कॉइंग का वास्तविक अर्थ नहीं है"] (http://stackoverflow.com/a/3725763/344643), जिसका अर्थ है –

+0

अच्छा! तुम जानते हो क्यों ? – Xlaudius

+4

मुझे इस * बिंदु पर ऐतिहासिक पर संदेह है, और मुझे गंभीरता से संदेह है कि यह मूल रूप से "कार्यान्वयन में आसानी" के अलावा कुछ भी था। –

उत्तर

34

जैसा कि स्टॉयन स्टीफानोव "जावास्क्रिप्ट पैटर्न" पुस्तक में बताते हैं, उछाल जावास्क्रिप्ट दुभाषिया कार्यान्वयन का परिणाम है।

जेएस कोड व्याख्या दो पास में प्रदर्शन की गई। पहले पास के दौरान, दुभाषिया परिवर्तनीय और कार्य घोषणाओं को संसाधित करता है।

दूसरा पास वास्तव में कोड निष्पादन चरण है। दुभाषिया कार्य अभिव्यक्तियों और अविकसित चर को संसाधित करता है।

इस प्रकार, हम इस तरह के व्यवहार का वर्णन करने के लिए "hoisting" अवधारणा का उपयोग कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

+8

मैं व्यक्तिगत रूप से _really_ शब्द "hoisting" पसंद नहीं करता।यह झूठा प्रतिनिधित्व देता है कि परिवर्तनीय और कार्य घोषणाएं वर्तमान दायरे के शीर्ष पर जादुई रूप से फंसे हुए हैं, जब वास्तव में, जेएस दुभाषिया, जैसा आपने बताया है, बाइंडिंग के लिए स्रोत कोड स्कैन करता है और ** फिर ** कोड निष्पादित करता है। – contactmatt

+0

अब मुझे पता चला कि जेएस सबसे ज्यादा गलत समझने वाली भाषा क्यों है, मैंने इसे किसी भी ट्यूटोरियल में नहीं देखा। और hoisting (और interepreter प्रवाह) के साथ भ्रमित हो गया। –

+2

उह, यह वास्तव में तर्क की व्याख्या नहीं करता है। एक सिंगल-पास दुभाषिया (जो होस्टिंग के कारण नहीं होता) बहुत आसान होता - तो डिजाइनरों ने दो पास क्यों चुना? – Bergi