एमडीएन के अनुसार, एक एरो फंक्शन एक्सप्रेशन एक रेगुलर फंक्शन एक्सप्रेशन के लिए एक वाक्यात्मक रूप से कॉम्पैक्ट वैकल्पिक है, हालांकि इसके लिए अपने स्वयं के बाइंडिंग के बिना, तर्क, सुपर, या new.target कीवर्ड। एरो फंक्शन एक्सप्रेशन विधियों के रूप में अनुपयुक्त हैं, और उन्हें कंस्ट्रक्टर के रूप में उपयोग नहीं किया जा सकता है।
जावास्क्रिप्ट में नियमित कार्यों और तीर कार्यों में 3 सूक्ष्म अंतर हैं।
-
इस बंधन का स्वामी नहीं है
एरो फ़ंक्शंस का अपना मूल्य नहीं होता है। एक तीर फ़ंक्शन के अंदर इसका मान हमेशा संलग्न दायरे से विरासत में मिलता है।
उदाहरण
this.a = 100; let arrowFunc = () => {this.a = 150}; function regFunc() { this.a = 200; } console.log(this.a) arrowFunc() console.log(this.a) regFunc() console.log(this.a)
आउटपुट
यह आउटपुट देगा -
100 150 150
देखें कि एरो फ़ंक्शन ने इस ऑब्जेक्ट को इसके दायरे से बाहर बदल दिया है। रेगुलर फंक्शन ने अपने आप में ही बदलाव किए हैं।
- एरो फ़ंक्शंस में तर्क सरणी नहीं होती है JS तर्कों में फ़ंक्शन में सरणी एक विशेष वस्तु होती है जिसका उपयोग फ़ंक्शन में सभी तर्कों को पारित करने के लिए किया जा सकता है। इसी तरह, एरो फ़ंक्शंस का तर्क ऑब्जेक्ट के लिए अपना स्वयं का बंधन नहीं होता है, वे एन्क्लोजिंग स्कोप के तर्कों के लिए बाध्य होते हैं।
- एरो फंक्शन कॉल करने योग्य हैं, लेकिन कंस्ट्रक्टिव नहीं हैं। यदि कोई फ़ंक्शन कॉल करने योग्य है, तो इसे बिना नए (यानी सामान्य फ़ंक्शन कॉल) के कॉल किया जा सकता है।
फ़ंक्शन घोषणाओं / अभिव्यक्तियों के माध्यम से बनाए गए कार्य निर्माण योग्य और कॉल करने योग्य दोनों हैं।
एरो फ़ंक्शंस (और विधियाँ) केवल कॉल करने योग्य हैं। क्लास कंस्ट्रक्टर केवल कंस्ट्रक्टिव होते हैं।
यदि आप एक गैर-कॉल करने योग्य फ़ंक्शन को कॉल करने या एक गैर-रचनात्मक फ़ंक्शन बनाने का प्रयास कर रहे हैं, तो आपको एक रनटाइम त्रुटि मिलेगी।
उदाहरण
let arrowFunc = () => {} new arrowFunc()
आउटपुट
यह कोड त्रुटि देता है -
arrowFunc is not a constructor