जावास्क्रिप्ट में फंक्शनल एक्सप्रेशन की बारीकियाँ

फंक्शन एक्सप्रेशन का नाम बिना कारण नहीं दिया गया है। इसका वास्तव में अर्थ यही है - कि ऐसे फंक्शन किसी एक्सप्रेशन का हिस्सा होते हैं।

उदाहरण के लिए, हम किसी स्ट्रिंग और एक बेनामी फंक्शन को जोड़ सकते हैं:

javascriptlet str = 'str' + function() {return 3;};
console.log(str); // 'strfunction() {return 3;}' आउटपुट करेगा

हमें 3 के बजाय ऐसा अजीब परिणाम क्यों दिखाई दे रहा है? क्योंकि दूसरा योगफल फंक्शन के परिणाम का नहीं, बल्कि उसका सोर्स कोड है (आखिरकार हमने इस फंक्शन को कॉल नहीं किया, बस लिख दिया)।

यानी फंक्शनल एक्सप्रेशन नाम इस बात को दर्शाता है कि ऐसा फंक्शन किसी एक्सप्रेशन में भाग लेता है।

वेरिएबल को असाइनमेंट भी एक एक्सप्रेशन है:

javascriptlet func = function() {
  console.log('!');
};

उदाहरण के लिए, फंक्शन को console.log में पैरामीटर के रूप में पास भी किया जा सकता है और यह उसके सोर्स कोड को कंसोल में आउटपुट करेगा - यह भी एक एक्सप्रेशन माना जाएगा:

javascriptconsole.log(function() {return 3;});

यह महत्वपूर्ण क्यों है: क्योंकि फंक्शन डिक्लेरेशन और फंक्शन एक्सप्रेशन में अंतर बिल्कुल भी यह नहीं है कि पहला फंक्शन नाम के साथ बनता है, और दूसरा शुरू में नामहीन होता है। ऐसा नहीं है।

उदाहरण। यहाँ हमारे पास बिना नाम का एक फंक्शन है, लेकिन साथ ही यह किसी एक्सप्रेशन में भाग नहीं ले रहा है (यानी इसके साथ कोई एक्शन नहीं किया जा रहा है, सीधे शब्दों में कहें तो):

javascript/*
  यह फंक्शन फंक्शन डिक्लेरेशन होगा,
  लेकिन सिंटैक्स एरर के साथ:
*/
function() {
  console.log('!');
}

ऐसा कोड एरर देगा! क्यों: चूंकि फंक्शन किसी एक्सप्रेशन में भाग नहीं ले रहा है, इसलिए ब्राउज़र इसे फंक्शन डिक्लेरेशन मानता है, लेकिन उसका नाम नहीं पाता है और एरर देता है।

एरर को दूर करने के लिए, फंक्शन को किसी एक्सप्रेशन का हिस्सा बनाना होगा। उदाहरण के लिए, इसके पहले + ऑपरेशन लिखते हैं:

javascript+function() { // ऐसा कोड सही है
  console.log('!');
};

यह कैसे काम करता है: + ऑपरेशन अपने आप में कुछ नहीं करता, यह +3 लिखने जैसा है - स्वीकार्य है, लेकिन कुछ नहीं बदलता।

लेकिन फंक्शन के मामले में - बदल जाता है। अब हमारा फंक्शन सिर्फ लिखा हुआ नहीं है, बल्कि एक एक्सप्रेशन में भाग ले रहा है। इसलिए अब कोई एरर नहीं होगी। फंक्शन के निष्पादन का परिणाम भी नहीं होगा, क्योंकि हमने इसे सिर्फ लिखा है, कॉल नहीं किया है।

+ के बजाय कुछ भी लिखा जा सकता है। उदाहरण के लिए:

javascript-function() { // ऐसा कोड सही है
  console.log('!');
};

!function() { // ऐसा कोड सही है
  console.log('!');
};

हम अपने फंक्शन को राउंड ब्रैकेट में भी ले सकते हैं, इस स्थिति में यह भी एक फंक्शनल एक्सप्रेशन बन जाएगा:

javascript(function() { // ऐसा कोड सही है
  console.log('!');
});
Задание 1

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascriptfunction func() {
  console.log('!');
}
Задание 2

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascriptlet func = function() {
  console.log('!');
}
Задание 3

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascript+function() {
  console.log('!');
}
Задание 4

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascript!function func() {
  console.log('!');
}
Задание 5

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascript-function func() {
  console.log('!');
}
Задание 6

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascript1 + function func() {
  console.log('!');
}
Задание 7

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascript(function func() {
  console.log('!');
})
Задание 8

निर्धारित करें कि प्रस्तुत फंक्शन फंक्शन डिक्लेरेशन है या फंक्शन एक्सप्रेशन:

javascriptconsole.log(
  function() {
    console.log('!');
  }
);