MDN অনুযায়ী, অ্যারো ফাংশন এক্সপ্রেশন হলো রেগুলার ফাংশন এক্সপ্রেশনের একটি সিনট্যাক্টিক্যালি কম্প্যাক্ট অ্যাল্টারনেটিভ, যদিও এর নিজস্ব this, arguments, super, বা new.target বাইন্ডিং নেই। অ্যারো ফাংশন মেথড হিসেবে উপযুক্ত নয় এবং কনস্ট্রাক্টর হিসেবে ব্যবহার করা যায় না।
রেগুলার ফাংশন এবং অ্যারো ফাংশনের মধ্যে ৩টি সূক্ষ্ম পার্থক্য রয়েছে।
১. নিজস্ব this বাইন্ডিং নেই
অ্যারো ফাংশনের নিজস্ব this ভ্যালু নেই। অ্যারো ফাংশনের ভিতরের this সবসময় এনক্লোজিং স্কোপ থেকে ইনহেরিট হয়।
উদাহরণ
this.a = 100;
let arrowFunc = () => { this.a = 150 };
function regFunc() { this.a = 200; }
console.log(this.a); // 100
arrowFunc();
console.log(this.a); // 150 (arrow ফাংশন আউটসাইড this চেঞ্জ করলো)
regFunc();
console.log(this.a); // 150 (regFunc নিজস্ব this তৈরি করলো, গ্লোবাল this আপডেট হয়নি)
আউটপুট
100 150 150
দেখুন অ্যারো ফাংশন তার স্কোপের বাইরের this অবজেক্ট চেঞ্জ করলো। রেগুলার ফাংশন শুধু নিজস্ব this-এ চেঞ্জস করলো।
২. অ্যারো ফাংশনের arguments অ্যারে নেই
জাভাস্ক্রিপ্টে ফাংশনের arguments অ্যারে একটি স্পেশাল অবজেক্ট যা ফাংশনে পাস করা সব আর্গুমেন্ট পাওয়ার জন্য ব্যবহৃত হয়। this-এর মতোই, অ্যারো ফাংশনের নিজস্ব arguments বাইন্ডিং নেই, এনক্লোজিং স্কোপের arguments-এর সাথে বাউন্ড থাকে।
৩. অ্যারো ফাংশন কলেবল (callable) কিন্তু কনস্ট্রাক্টেবল (constructable) নয়
- Constructable:
newদিয়ে কল করা যায় (যেমনnew User()) - Callable: নরমাল ফাংশন কল করা যায়
ফাংশন ডিক্লেরেশন/এক্সপ্রেশন → উভয় constructable এবং callable।
অ্যারো ফাংশন (এবং মেথড) → শুধু callable।
ক্লাস কনস্ট্রাক্টর → শুধু constructable।
নন-কলেবল ফাংশন কল করলে বা নন-কনস্ট্রাক্টেবল ফাংশন কনস্ট্রাক্ট করলে রানটাইম এরর দিবে।
let arrowFunc = () => {}
new arrowFunc() // Error: arrowFunc is not a constructor
সারসংক্ষেপ টেবিল
| ফিচার | রেগুলার ফাংশন | অ্যারো ফাংশন |
|---|---|---|
| this বাইন্ডিং | নিজস্ব (ডাইনামিক) | লেক্সিক্যাল (এনক্লোজিং স্কোপ) |
| arguments | নিজস্ব | নেই (এনক্লোজিং স্কোপ থেকে) |
| new দিয়ে কল | হ্যাঁ | না |
| prototype | হ্যাঁ | না |
| super | হ্যাঁ | না |