2017-03-24 5 views
5
var f=function foo() 
{ 
console.log("hello"); 
}; 

f(); 
foo(); 

इस के रूप में एक त्रुटि पैदा करता है: "अपवाद: ReferenceError: foo परिभाषित नहीं है"किसी अन्य var को असाइन किए जाने के बाद जावास्क्रिप्ट फ़ंक्शन को अपने मूल नाम से एक्सेस करना क्यों संभव नहीं है?

लेकिन "foo" परिभाषित किया गया है। ऐसा क्यों होता है? मुझे पता है कि यह एक फ़ंक्शन अभिव्यक्ति है और "f()" का उपयोग इस फ़ंक्शन तक पहुंचने के लिए किया जाता है। लेकिन यह एक अज्ञात कार्य नहीं है, मेरे पास इस फ़ंक्शन के लिए एक नाम है। मैं अपने नाम का उपयोग कर फ़ंक्शन तक पहुंच नहीं पा रहा हूं?

+2

देखें https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/function#Named_function_expression) फ़ंक्शन अभिव्यक्ति के मामले में, यदि आप फ़ंक्शन का नाम देते हैं, तो नाम केवल फ़ंक्शन बॉडी में उपलब्ध है, न कि बाहर। – abhishekkannojia

+1

जेएस में सभी फ़ंक्शन वेरिएबल्स हैं। लेकिन आपके मामले में foo() को एफ को असाइन किया गया है। foo() को संदर्भ त्रुटि मिलेगी क्योंकि इसे परिभाषित नहीं किया गया है। –

+0

foo परिभाषित नहीं किया गया है। एफ परिभाषित किया गया है। –

उत्तर

6

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

वाक्य रचना

var myFunction = function [name]([param1[, param2[, ..., paramN]]]) { 
    statements 
}; 

The function name. Can be omitted, in which case the function is anonymous. The name is only local to the function body.

2

आप conflating रहे समारोह भाव समारोह घोषणाओं साथ

यह एक चर foo वाणी और इसे करने के लिए एक गुमनाम समारोह प्रदान करती है:

function bar() {}; 

यह एक चर baz वाणी और यह एक प्रदान करती है:

var foo = function() {}; 

यह वर्तमान क्षेत्र में एक समारोह bar वाणी फ़ंक्शन जिसका नाम qux है:

var baz = function qux() {}; 

ध्यान दें कि इस मामले में, इस दायरे में फ़ंक्शन घोषित नहीं किया जा रहा है। केवल चर घोषित किया जा रहा है। ऐसा ही होता है कि इस फ़ंक्शन की नाम संपत्ति qux पर सेट की जाएगी।

this question देखें।

संपादित करें: कोड ब्लॉक संपादित करें: [MDN] (जोड़ा प्रासंगिक लिंक

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

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