জাভাস্ক্রিপ্টে নামযুক্ত ফাংশন এক্সপ্রেশন
ধরুন আমাদের কাছে এইরকম একটি ফাংশন এক্সপ্রেশন আছে:
let test = function() {
console.log('!');
};
test(); // আউটপুট দেবে '!'
আসুন আমাদের ফাংশনটিকে একটি নাম দিন func:
let test = function func() {
console.log('!');
};
test();
আপনি ইতিমধ্যেই জানেন, এই নাম দিয়ে ফাংশনে অ্যাক্সেস করা যাবে না:
let test = function func() {
console.log('!');
};
test(); // আউটপুট দেবে '!'
func(); // একটি ত্রুটি নিক্ষেপ করবে
যদি এটি অ্যাক্সেসযোগ্য না হয় তবে ফাংশনের নাম দেওয়া কেন? বিষয়টি হল, এই নামটি ফাংশনের বাইরে থেকে অ্যাক্সেসযোগ্য হবে না, কিন্তু এই ফাংশনের ভিতরে অ্যাক্সেসযোগ্য হবে।
আসুন পরীক্ষা করি:
let test = function func() {
console.log(func); // ফাংশনটি তার নিজের সোর্স কোড আউটপুট দেবে
};
test(); // ফাংশন কল করি
আসুন আমাদের ফাংশনটি তার নিজের ভিতরেই কল করি:
let test = function func() {
console.log('!'); // '!' আউটপুট দেই
func(); // নিজেকে কল করি
};
test();
যদি এই কোডটি চালানো হয়, তাহলে কনসোলে অসীম সংখ্যক আউটপুট দেখা যাবে।
আসলে আমাদের ফাংশনটি তার নিজের ভিতরে শুধুমাত্র
func হিসেবেই নয়, বরং test হিসেবেও
কল করা যেতে পারে:
let test = function func() {
console.log('!');
test(); // নিজেকে কল করি
};
test();
তাহলে পার্থক্যটা কী? পার্থক্য হল নাম
test - এটি কেবল একটি ভেরিয়েবল। স্ক্রিপ্ট
চলাকালীন, আমাদের ফাংশনটি অন্য ভেরিয়েবলে
অ্যাসাইন করা যেতে পারে বা প্যারামিটার হিসেবে
পাস করা যেতে পারে - এই ক্ষেত্রে test
ভেরিয়েবল এবং ফাংশনের মধ্যে সংযোগটি
নষ্ট হয়ে যেতে পারে।
অন্যদিকে, func নামটি বিশেষভাবে ফাংশনের
সাথে শক্তভাবে বাঁধা থাকে যাতে আমাদের ফাংশনটি
তার নিজের ভিতর থেকে অ্যাক্সেস করা যায়।
ফাংশনের নাম সহ এই ধরনের Function Expression কে নামযুক্ত ফাংশন এক্সপ্রেশন বলা হয়।