जावास्क्रिप्ट: वापसी अभिव्यक्ति के बाद बयान निष्पादित किया जाएगा?

यहां कोड आया है:

var foo=1;
function bar(){
    foo=10;
    return;
    function foo(){}
}
bar();
alert(foo);

और परिणाम 1 है!

बस नहीं पता क्यों।

जहां तक ​​मेरी समझ है, पहली पंक्ति ने विंडो ऑब्जेक्ट को ग्लोबल वैरिएबल 'foo' परिभाषित किया है और मान 1 है, फिर बार फ़ंक्शन के भीतर foo को 10 के साथ असाइन करें, क्योंकि foo से पहले 'var' नहीं है, इसलिए वैश्विक चर 'foo' को 10 मान के साथ असाइन किया जाएगा। फिर वापस लौटें, बाकी का फ़ंक्शन निष्पादित नहीं किया जाएगा।

लेकिन यह अलर्ट 1।

बार फ़ंक्शन के भीतर फ़ंक्शन फ़ू परिभाषा को हटाते समय, यह 10 को सतर्क करेगा।

0

2 उत्तर

The reason it's returning 1 is because the foo=10 is inside of the function bar()

इसलिए foo = 10 एक स्थानीय चर है और आपको इसे बदलने के लिए foo चर के लिए अपना फ़ंक्शन कॉल करना होगा

उदाहरण के लिए यदि आप ऐसा करते हैं तो यह 10 को सतर्क करेगा

var foo=1;
function bar(){
    foo=10;
    return;
    alert(foo);
}
bar();
0
जोड़ा
ठीक है धन्यवाद लड़का, मुझे जावास्क्रिप्ट की होस्टिंग सुविधा के साथ मिला। फ़ंक्शन घोषणा फ़ू को फ़ंक्शन के स्थानीय चर के रूप में बनाती है।
जोड़ा लेखक Wayou, स्रोत

Welcome to the mysterious world of JavaScript hoisting :) Read this article, you will be enlightened: http://www.adequatelygood.com/JavaScript-Scoping-and-Hoisting.html

एक संक्षिप्त उत्तर के रूप में: चीजों को इस तरह जावास्क्रिप्ट में काम करने के लिए:

hello();

function hello() {
    alert('hello');
}

जावास्क्रिप्ट पहले आपके कोड के शीर्ष पर सभी फ़ंक्शन घोषणाएं चलाता है, ताकि आप परिभाषित किए गए "पहले" किसी भी फ़ंक्शन को कॉल कर सकें। मुझे विश्वास है कि फ़ंक्शन घोषणा होने पर foo 10 में क्यों नहीं बदलेगा क्योंकि यह var foo; जैसा व्यवहार करता है। आप स्थानीय रूप से फ़ंक्शन को परिभाषित कर रहे हैं, इस प्रकार जब यह foo = 10; चलाता है तो आप स्थानीय रूप से परिभाषित function foo() को मूल्य 10

0
जोड़ा
धन्यवाद, इसलिए foo फ़ू फ़ंक्शन घोषणा द्वारा स्थानीय चर बनाया गया है।
जोड़ा लेखक Wayou, स्रोत