जब आप var
साथ एक चर को परिभाषित, चर की घोषणा दायरे के शीर्ष पर "फहराया" है और इस प्रकार चर पूरे दायरे के लिए परिभाषित किया गया है। चर का प्रारंभिकरण (इसे प्रारंभिक मान निर्दिष्ट करना) कोड में एक ही स्थान पर रहता है।
तो, आपके दूसरे उदाहरण में, जब आप alert(box)
करते हैं, तो box
परिवर्तनीय var
कथन के कारण पहले ही घोषित कर दिया गया है। आपकी दूसरी उदाहरण:
var box;
alert(box);
box = "Thinking outside the box";
यह box
चर घोषित करता है (हालांकि आरंभ नहीं:
alert(box);
var box = "Thinking outside the box";
मूल रूप से (box
चर की घोषणा दायरे के शीर्ष करने के फहराया जाता है) इस के बराबर है) अपने alert(box)
बयान से पहले और इस तरह आप एक परिणाम है कि संगत है के साथ चर घोषित किया जा रहा है, लेकिन अभी तक कोई मूल्य होने मिल (alert()
रिपोर्ट undefined
जो क्या होता है जब चर मौजूद है, लेकिन अभी तक प्रारंभ नहीं किया गया है)।
आपका पहला उदाहरण var
का उपयोग नहीं करता है और इस तरह वहाँ कोई उत्थापन तो बिंदु जहां alert(box)
कर में, सभी नामित box
में कोई चर है और इस प्रकार आप uncaught reference error
मिलता है।
कई, कई पदों इतने पर है कि यहाँ उत्थापन के विवरण का वर्णन कर रहे हैं। आप यहां उनकी एक लंबी सूची देख सकते हैं: https://stackoverflow.com/search?q=javascript+variable+hoisting जहां आपको वेरिएबल होस्टिंग का और स्पष्टीकरण मिलेगा।
नोट: समारोह घोषणाओं भी, जो पोस्ट आप समारोह घोषणाओं के बजाय चर घोषणाओं के बारे में हो जाएगा लगता है में से कुछ तो फहराया जाता है, हालांकि अवधारणा काफी एक ही है।
"उत्थापन" – elclanrs
बुला बॉक्स, इससे पहले कि आप बॉक्स को परिभाषित किया है, यह मौजूद नहीं है, यह केवल मौजूद है जब आप इसे परिभाषित करते हैं, 'यह एक मूल्य है या नहीं के बारे में पढ़ें। – saj
आपकी समझ काफी वहाँ [के बीच 'अनिर्धारित' और जावास्क्रिप्ट में क्या अंतर है 'नहीं परिभाषित'?] है :) की –