2014-11-12 7 views
5

यह 1 के बजाय 2 क्यों लौटाता है? लगता है कि दूसरा "var" चुपचाप अनदेखा किया जाता है।क्या जावास्क्रिप्ट व्याख्यात्मक स्कोपिंग लागू करता है?

function foo() 
{ 
    var local = 1; 
    { 
    var local = 2; 
    } 
    return local; 
} 
foo() 
/* 
2 
*/ 
+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let –

उत्तर

3

the MDN से:

जावास्क्रिप्ट ब्लॉक बयान गुंजाइश नहीं है; बल्कि, एक ब्लॉक के भीतर घोषित एक चर फ़ंक्शन (या वैश्विक दायरा) के लिए स्थानीय है जो ब्लॉक भीतर रहता है।

जावास्क्रिप्ट में एक चर का दायरा, पूरे समारोह जिसमें यह घोषित किया जाता है (या वैश्विक क्षेत्र) है, इसलिए आप केवल एक चर local यहाँ है।

आपका कोड को

function foo() 
{ 
    var local; 
    local = 1; 
    { 
    local = 2; 
    } 
    return local; 
} 
foo() 

नोट ES6 (जावास्क्रिप्ट के नए मानदंड) एक lexical scoping with let लेकिन it's not yet really available परिचय करता है कि बराबर है।

+0

यह फ़ायरफ़ॉक्स और नोडजेस सद्भाव के लिए उपलब्ध है। – simonzack

+1

@ सिमोनज़ैक क्या आपने नोटिस नहीं किया कि मैं कंगैक्स टेबल से जुड़ा हूं? जब तक ओपी सर्वर की तरफ कोडिंग नहीं कर लेता है, वह वास्तव में आईई और क्रोम के साथ असंगत नहीं हो सकता है, इसलिए मैंने कहा "वास्तव में उपलब्ध नहीं है"। –

+0

आह मैं देखता हूं, मैंने आपके लिंक पर क्लिक नहीं किया। – simonzack

5

जावास्क्रिप्ट में केवल कार्य स्तर का दायरा और वैश्विक दायरा है। आप ब्लॉक स्कोप नहीं बना सकते हैं और इसमें कोई विशेष अर्थ नहीं है और कोई गुंजाइश नहीं बनाती है।

और यह कैसे अपने कोड

function foo() 
{ 
    var local = 1; 
    local = 2; 
    return local; 
} 
foo(); 

समाप्त होता है ES6 में आप Let की मदद से ब्लॉक स्तर स्कोप बना सकते हैं। ES6 अभी तक समर्थित नहीं है। उस here

+2

यह ध्यान दिया जाना चाहिए कि निकट भविष्य में ईएस 6 कीवर्ड के साथ व्याख्यात्मक दायरा आ रहा है। – Capaj

संबंधित मुद्दे