जावास्क्रिप्ट में नामित फंक्शनल एक्सप्रेशन
मान लीजिए कि हमारे पास इस तरह का फंक्शनल एक्सप्रेशन है:
javascriptlet test = function() {
console.log('!');
};
test(); // '!' आउटपुट करेगा
आइए हम अपने फ़ंक्शन को नाम func दें:
javascriptlet test = function func() {
console.log('!');
};
test();
जैसा कि आप पहले से ही जानते हैं, इस नाम से फ़ंक्शन तक पहुँचा नहीं जा सकता:
javascriptlet test = function func() {
console.log('!');
};
test(); // '!' आउटपुट करेगा
func(); // एरर देगा
फ़ंक्शन को नाम देने का क्या फायदा है, अगर यह उपलब्ध नहीं होगा? बात यह है कि यह नाम फ़ंक्शन के बाहर से एक्सेस करने योग्य नहीं होगा, लेकिन फ़ंक्शन के अंदर से एक्सेस करने योग्य होगा।
आइए जांच करें:
javascriptlet test = function func() {
console.log(func); // फ़ंक्शन अपना ही सोर्स कोड आउटपुट करेगा
};
test(); // फ़ंक्शन को कॉल करते हैं
आइए अपने फ़ंक्शन को उसके अंदर ही कॉल करें:
javascriptlet test = function func() {
console.log('!'); // '!' आउटपुट करते हैं
func(); // खुद को कॉल करते हैं
};
test();
यदि इस कोड को रन करते हैं, तो कंसोल में अनंत मात्रा में आउटपुट प्रिंट होंगे।
वास्तव में, हमारे फ़ंक्शन को उसके अंदर
न केवल func के रूप में कॉल किया जा सकता है, बल्कि
test के रूप में भी कॉल किया जा सकता है:
javascriptlet test = function func() {
console.log('!');
test(); // खुद को कॉल करते हैं
};
test();
फर्क क्या है? फर्क यह है कि नाम
test - यह सिर्फ एक वेरिएबल है। स्क्रिप्ट के काम करने की प्रक्रिया में
हमारा फ़ंक्शन किसी दूसरे वेरिएबल में लिखा जा सकता है
या पैरामीटर के रूप में पास हो सकता है
- इस मामले में वेरिएबल test
और फ़ंक्शन के बीच का कनेक्शन खत्म हो सकता है।
नाम func सख्ती से फ़ंक्शन से बंधा हुआ है
विशेष रूप से इसलिए ताकि हम अपने फ़ंक्शन के अंदर से
उसी फ़ंक्शन को कॉल कर सकें।
फ़ंक्शन के नाम वाले ऐसे Function Expression को नामित फंक्शनल एक्सप्रेशन कहा जाता है।