2011-10-03 7 views
5

मुझे अपने मुद्दे पर एक सटीक मिलान नहीं मिला, हालांकि कई जावास्क्रिप्ट स्कॉइंग प्रश्न मौजूद हैं। प्रश्न के लिए मेरा वर्तमान कोड यहां है।जावास्क्रिप्ट स्कोपिंग भ्रम

var my_var = "blank"; 
var MyFunc = function() { 
    my_var = "one"; 
    //var my_var = "two"; 
} 
alert(my_var); 
MyFunc(); 
alert(my_var); 

जब मैं इस चलाने के लिए, मैं के साथ "रिक्त" सतर्क कर रहा हूँ और उसके बाद "एक" अपेक्षा के अनुरूप। हालांकि, अगर मैं उस रेखा को अनदेखा करता हूं, तो ऐसा लगता है।

var my_var = "blank"; 
var MyFunc = function() { 
    my_var = "one"; 
    var my_var = "two"; 
} 
alert(my_var); 
MyFunc(); 
alert(my_var); 

मैं साथ "रिक्त" सतर्क कर रहा हूँ और उसके बाद "रिक्त"। यह वही नहीं है जो मैं उम्मीद करता हूं और मुझे यह भ्रमित लगता है कि एक पंक्ति जोड़ने से व्यवहार दूर हो जाएगा। क्या कोई यहां समझा सकता है कि क्या हो रहा है? मैं इस व्यवहार को फ़ायरफ़ॉक्स और सफारी दोनों में देख रहा हूं।

+0

समझाया। – jfriend00

उत्तर

7

सभी var कथन प्रभावी रूप से उनके संलग्न कार्य (प्रकार) के शीर्ष पर "फिसल गए" हैं। इस प्रकार, इस तथ्य में आपको var my_varकहीं भी का अर्थ है कि "my_var" के सभी उल्लेख स्थानीय चर का संदर्भ देते हैं।

(मैंने कहा क्योंकि var बयान का काम हिस्सा स्थानांतरित कर दिया नहीं है "की तरह", बस घोषणा कि पहचानकर्ता एक स्थानीय चर होना चाहिए।)

+0

दस्तावेज़? कुछ भी जो इस उदाहरण से अलग पुष्टि करता है? – Neal

+0

अपनी सजा समाप्त करने के लिए। Hoisting पूरे समारोह के अंदर 'my_var' एक स्थानीय चर बनाता है। – jfriend00

+0

spec इसे बहुत स्पष्ट बनाता है। धारा 12.2। चर "वैरिएबल" के रूप में spec वार्तालाप करता है, और यह "hoisting" हिस्सा है। – Pointy

3

कारण यह है कि घोषणाओं एक के भीतर फहराया जाता है जावास्क्रिप्ट में फ़ंक्शन का दायरा। इसके बारे में here के बारे में और पढ़ें।

1

जावास्क्रिप्ट चर के पास सी, सी ++, जावा, और सी # के विपरीत कार्यक्षेत्र है जिसमें ब्लॉक स्कोप (घुंघराले ब्रेस) है।

त्वरित सुझाव: क्यों कभी एक ही नाम वैश्विक चर के रूप में सिर्फ मुसीबत के लिए पूछ रहा है के साथ स्थानीय चर का उपयोग कर जावास्क्रिप्ट उत्थापन

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

फिर भी एक और अच्छा कारण
संबंधित मुद्दे