एमडीएन के अनुसार, एक एरो फंक्शन एक्सप्रेशन एक नियमित फ़ंक्शन एक्सप्रेशन के लिए एक वाक्यात्मक रूप से कॉम्पैक्ट विकल्प है, हालांकि इसके लिए अपने स्वयं के बाइंडिंग के बिना, तर्क, सुपर, या 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
देखें कि एरो फ़ंक्शन ने इस ऑब्जेक्ट को इसके दायरे से बाहर बदल दिया है। रेगुलर फंक्शन ने अपने आप में ही ये बदलाव किए हैं।
एरो फ़ंक्शंस में तर्क सरणी नहीं होती है
जेएस तर्कों में कार्यों में सरणी एक विशेष वस्तु है जिसका उपयोग फ़ंक्शन में सभी तर्कों को पारित करने के लिए किया जा सकता है। इसी तरह, एरो फ़ंक्शंस का तर्क ऑब्जेक्ट के लिए अपना स्वयं का बंधन नहीं होता है, वे एन्क्लोजिंग स्कोप के तर्कों के लिए बाध्य होते हैं।
एरो फ़ंक्शन कॉल करने योग्य हैं लेकिन निर्माण योग्य नहीं हैं
यदि कोई फ़ंक्शन निर्माण योग्य है, तो इसे नए, यानी नए उपयोगकर्ता () के साथ बुलाया जा सकता है। यदि कोई फ़ंक्शन कॉल करने योग्य है, तो इसे बिना नए (यानी सामान्य फ़ंक्शन कॉल) के कॉल किया जा सकता है।
फ़ंक्शन घोषणाओं / अभिव्यक्तियों के माध्यम से बनाए गए कार्य निर्माण योग्य और कॉल करने योग्य दोनों हैं।
एरो फ़ंक्शंस (और विधियाँ) केवल कॉल करने योग्य हैं। क्लास कंस्ट्रक्टर केवल निर्माण योग्य होते हैं।
यदि आप एक गैर-कॉल करने योग्य फ़ंक्शन को कॉल करने या एक गैर-निर्माण योग्य फ़ंक्शन बनाने का प्रयास कर रहे हैं, तो आपको एक रनटाइम त्रुटि मिलेगी।
let arrowFunc = () => {} new arrowFunc() This code gives the error: arrowFunc is not a constructor