मैंने हमेशा सोचा है कि ब्राउज़र स्ट्रिंग द्वारा ऊपर से नीचे स्ट्रिंग से जावास्क्रिप्ट कोड निष्पादित करते हैं (आप इस व्यवहार को एक स्क्रिप्टिंग भाषा से अपेक्षा करते हैं)। लेकिन स्पष्ट रूप से यह मामला यहाँ नहीं है:जावास्क्रिप्ट का वास्तव में व्याख्या कैसे किया जाता है?
// काम करता है सही
<script>
test();
function test() { alert('test'); }
</script>
लेकिन अगर मैं एक चर के रूप में समारोह की घोषणा के साथ यह विफल रहता है 'Uncaught ReferenceError: परीक्षण से परिभाषित नहीं है':
<script>
test();
var test = function() { alert('test'); }
</script>
तो जावास्क्रिप्ट इंजन कभी-कभी कोड को ऊपर से नीचे तक निष्पादित नहीं करता है। यह किसी भी तरह से कार्यों को प्रीलोड कर सकता है भले ही उन्हें अंत में घोषित किया गया हो। यह वास्तव में कैसे काम करता है और क्यों?
मेरा मानना है कि फ़ंक्शन() {} केवल एक विशेष मामला है, जो दायरे के शीर्ष पर ले जाया जाता है। मुझसे गलती भी हो सकती है। –
इसे * ए [एएसटी] (http://en.wikipedia.org/wiki/Abstract_syntax_tree) जैसे किसी चीज़ में निष्पादित करने से पहले पूरी तरह से पार्स किया गया है। यही कारण है कि आप स्रोत के नीचे लाइनों के लिए "सिंटेक्स त्रुटियां" देख सकते हैं। – Matt
यहां शीर्ष उत्तर पर एक नज़र डालें: http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname – viper