কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে রেগুলার ফাংশন এবং অ্যারো ফাংশনের পার্থক্য

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হ্যাঁনা
  1. জাভাস্ক্রিপ্ট ফাংশনে ডিফল্ট ও রেস্ট প্যারামিটার পার্থক্য

  2. জাভাস্ক্রিপ্টে ফাংশন ও মেথডের পার্থক্য

  3. জাভাস্ক্রিপ্টে কাস্টম ও বিল্ট-ইন ফাংশন পার্থক্য

  4. জাভাস্ক্রিপ্টে Concise Arrow Functions