MDN के अनुसार, एक एरो फ़ंक्शन एक्सप्रेशन एक रेगुलर फ़ंक्शन एक्सप्रेशन का सिंटैक्टिकली कॉम्पैक्ट विकल्प है, हालांकि इसके अपने this, arguments, super, या new.target कीवर्ड्स के बाइंडिंग्स के बिना। एरो फ़ंक्शन एक्सप्रेशन्स मेथड्स के रूप में अनुपयुक्त हैं, और इन्हें कंस्ट्रक्टर्स के रूप में उपयोग नहीं किया जा सकता।
JavaScript में रेगुलर फ़ंक्शन्स और एरो फ़ंक्शन्स में 3 सूक्ष्म अंतर हैं।
कोई अपना this बाइंडिंग नहीं
एरो फ़ंक्शन्स का अपना this मान नहीं होता। एरो फ़ंक्शन के अंदर this का मान हमेशा एनक्लोजिंग स्कोप से इनहेरिट होता है।
उदाहरण
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
देखें कि एरो फ़ंक्शन ने अपने स्कोप के बाहर this ऑब्जेक्ट को बदल दिया। रेगुलर फ़ंक्शन ने केवल अपने भीतर परिवर्तन किए।
- एरो फ़ंक्शन्स का अपना arguments ऐरे नहीं होता JS में फ़ंक्शन्स में arguments ऐरे एक विशेष ऑब्जेक्ट है जिसका उपयोग फ़ंक्शन को पास किए गए सभी तर्कों को प्राप्त करने के लिए किया जा सकता है। this के समान, एरो फ़ंक्शन्स का अपना arguments ऑब्जेक्ट बाइंडिंग नहीं होता, वे एनक्लोजिंग स्कोप के arguments से बंधे होते हैं।
- एरो फ़ंक्शन्स कॉल करने योग्य हैं लेकिन कंस्ट्रक्ट करने योग्य नहीं यदि कोई फ़ंक्शन कंस्ट्रक्टिबल है, तो इसे new के साथ कॉल किया जा सकता है, यानी new User()। यदि कोई फ़ंक्शन कॉल करने योग्य है, तो इसे new के बिना कॉल किया जा सकता है (यानी नॉर्मल फ़ंक्शन कॉल)।
फ़ंक्शन डिक्लेरेशन/एक्सप्रेशन्स के माध्यम से बनाए गए फ़ंक्शन्स दोनों कंस्ट्रक्टिबल और कॉल करने योग्य हैं।
एरो फ़ंक्शन्स (और मेथड्स) केवल कॉल करने योग्य हैं। क्लास कंस्ट्रक्टर्स केवल कंस्ट्रक्टिबल हैं।
यदि आप नॉन-कॉलेबल फ़ंक्शन को कॉल करने का प्रयास करते हैं या नॉन-कंस्ट्रक्टिव फ़ंक्शन को कंस्ट्रक्ट करने का प्रयास करते हैं, तो आपको रनटाइम एरर मिलेगा।
उदाहरण
let arrowFunc = () => {} new arrowFunc()
आउटपुट
यह कोड एरर देता है:
arrowFunc is not a constructor