2015-09-29 6 views
6

पर असाइनमेंट के बाद फ़ंक्शन का नाम क्यों उपलब्ध नहीं होगा, मैंने अपने साक्षात्कार में से एक में इस सवाल का सामना किया। मुझे कोई जवाब नहीं मिला, इसलिए इसे स्टैक ओवरव्लोएक वैरिएबल

जेएस में एक साधारण सवाल है लेकिन मैं इसके पीछे कारण नहीं ढूंढ पा रहा हूं। नीचे कोड है।

var f = function foo(a, b) { 
    console.log(a + "-" + b); //f(1,2) will print 1-2 
    //foo(1,2) is undefined. 
} 

अब अगर मैं f(1,2) करता हूं तो यह पूरी तरह से ठीक काम करता है।

लेकिन अगर मैं foo(1,2) करता हूं तो यह undefined function कहता है।

ऐसा क्यों हो रहा है? फ़ंक्शन को जेएस वैरिएबल को असाइन करने के बाद फ़ंक्शन नाम के साथ फ़ंक्शन क्यों नहीं कहा जा सकता है?

+0

कृपया स्वीकार किए गए उत्तरों में से एक को चिह्नित करने पर विचार करें। –

उत्तर

7

There are two ways to declare functions.

समारोह घोषणा:

function f(a,b) { } 

समारोह अभिव्यक्ति:

var f = function foo(a, b) { } 
:

var f = function(a,b) { } 

समारोह भाव में, आप भी इस तरह की एक "आंतरिक" समारोह नाम निर्दिष्ट कर सकते हैं

नाम foo केवल फ़ंक्शन के अंदर से दिखाई देगा। यह आमतौर पर एक सही आत्म-संदर्भ सुनिश्चित करने के लिए पुनरावर्ती कार्यों में उपयोग किया जाता है।

फ़ंक्शन घोषणाओं और अभिव्यक्तियों के बीच अधिक विस्तृत अंतर के लिए कृपया ECMAScript 5 विनिर्देश, section 13 देखें।

3

के लिए फ़ंक्शन अभिव्यक्ति (जो आपके पास है) नाम foo केवल अभिव्यक्ति के भीतर ही उपलब्ध है।

MDN: यदि आप फ़ंक्शन बॉडी के अंदर वर्तमान फ़ंक्शन को संदर्भित करना चाहते हैं, तो आपको नामांकित फ़ंक्शन अभिव्यक्ति बनाना होगा। यह नाम केवल फ़ंक्शन बॉडी (स्कोप) के लिए स्थानीय है।

+0

यूप। नाम के बीच केवल फ़ंक्शन बॉडी के लिए स्थानीय होगा यदि हम इसे कुछ चर के लिए असाइन करते हैं, है ना? – Parashuram

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