توابع ناشناس (Anonymous Functions) - آزمون جاوااسکریپت
امروز میخوام در مورد توابع ناشناس (Anonymous Functions) در جاوااسکریپت باهات صحبت کنم. این توابع از اون دسته مفاهیمی هستن که ممکنه اولش کمی گیجکننده به نظر بیان، اما وقتی باهاشون آشنا بشی، میفهمی که چقدر کاربردی و مهماند.
این یک آزمون در مورد توابع ناشناس جاوااسکریپت هست که قراره بهت کمک کنه عمیقتر با این مفهوم آشنا بشی. با انجام این آزمون میتونی میزان مهارت و تسلط خودت رو درباره توابع ناشناس جاوااسکریپت بسنجی و همزمان اطلاعات خوبی در مورد این موضوع به دست بیاری.

توابع ناشناس، چیه و چرا اصلا به وجود اومدن؟
توابع ناشناس، همونطور که از اسمشون پیداست، توابعی هستند که هیچ اسمی ندارن. این توابع معمولاً به عنوان مقدار به یک متغیر اختصاص داده میشن یا به عنوان آرگومان به تابعهای دیگه فرستاده میشن.
شاید از خودت بپرسی که چرا باید از تابعی استفاده کرد که اسم نداره؟ دلیلش اینه که گاهی اوقات ما به تابعی نیاز داریم که فقط یک بار ازش استفاده کنیم و دیگه لازم نیست دوباره صداش بزنیم. در این شرایط، تعریف یک تابع با اسم اضافی و غیرضروریه و فقط کد رو شلوغ میکنه. توابع ناشناس اینجا به دادمون میرسن.
برای درک بهتر، بیا نگاهی به نحوه تعریف یک تابع ناشناس بندازیم. برخلاف تابعهای معمولی که با کلمه کلیدی function و بعدش اسم تابع تعریف میشن، توابع ناشناس فقط با کلمه function شروع میشن و بلافاصله پرانتزها و بدنهی تابع میان. مثلاً:
const sayHello = function() {
console.log("Hello!");
};
sayHello();
اینجا ما یک تابع ناشناس تعریف کردیم و اون رو به متغیر sayHello اختصاص دادیم. حالا میتونیم با صدا زدن sayHello() به راحتی تابع رو اجرا کنیم.
موارد استفاده توابع ناشناس
استفاده از توابع ناشناس در جاوااسکریپت خیلی رایجه. یکی از مهمترین کاربردهاشون، استفاده به عنوان تابع callback هست. تابع callback تابعیه که به عنوان آرگومان به تابع دیگهای فرستاده میشه و بعداً توسط اون تابع فراخوانی میشه.
مثلاً فرض کن میخوایم یک پیامی رو با یک ثانیه تأخیر نمایش بدیم. در این حالت میتونیم از تابع setTimeout استفاده کنیم و یک تابع ناشناس بهش پاس بدیم:
setTimeout(function() {
console.log("این پیام با یک ثانیه تاخیر نمایش داده شد.");
}, 1000);
توابع ناشناس در متدهای آرایه مثل map، filter و forEach هم کاربرد زیادی دارن. مثلاً میخوایم یک آرایه از اعداد رو دو برابر کنیم:
const numbers = [1, 2, 3, 4];
const doubledNumbers = numbers.map(function(number) {
return number * 2;
});
console.log(doubledNumbers);
// Output: [2, 4, 6, 8]
نمونه سوالات آزمون توابع ناشناس
سوالات این آزمون در مورد توابع ناشناس در جاوااسکریپت هستن و قراره دانش تو رو در این زمینه به چالش بکشن. مثلاً ممکنه با سوالاتی مثل اینها روبرو بشی:
- تفاوت تابع ناشناس با تابع نامدار چیه؟
- چرا توابع ناشناس برای استفاده در IIFEها (Immediately Invoked Function Expressions) مناسب هستن؟
- کد زیر چه خروجیای داره و چرا؟
(function(a, b) {
console.log(a + b);
})(5, 10);
- تابع callback چیه و چطور از یک تابع ناشناس به عنوان callback استفاده میکنی؟
با شرکت در این آزمون، متوجه میشی که چقدر با این مبحث آشنایی داری و چه نکتههایی رو باید بیشتر مطالعه کنی. علاوه بر این، مثالهای عملی که در سوالات مطرح میشن بهت کمک میکنن تا فهم عمیقتری از کاربردهای توابع ناشناس به دست بیاری.
مقایسه توابع ناشناس و توابع Arrow
امروزه با معرفی Arrow Functions در ES6، توابع ناشناس شکل دیگهای هم پیدا کردن. توابع Arrow هم مثل توابع ناشناس، اسم ندارن و نحوه نوشتنشون خیلی خلاصهتر و جذابتره. در جدول زیر تفاوتهای اصلی این دو رو با هم مقایسه میکنیم:
| ویژگی | تابع ناشناس (Function Expression) | تابع Arrow (Arrow Function) |
|---|---|---|
| نحوه نوشتن | طولانیتر | خلاصهتر و کوتاهتر |
| کلمه کلیدی | function |
=> (پیکان) |
مقدار this |
بستگی به context فراخوانی داره | this رو از scope والد به ارث میبره |
| قابلیت ساختن constructor | بله | خیر |
همونطور که میبینی، توابع Arrow همون توابع ناشناس هستن که به شکل مدرنتری نوشته میشن و در خیلی از موارد استفاده ازشون راحتتره.
حالا که با توابع ناشناس و کاربردهای اونها آشنا شدی، وقتشه که خودت رو بسنجی. آمادهای تا ببینی چقدر به این مبحث مسلطی؟
روی دکمه شروع کلیک کن و در این آزمون که مربوط به توابع ناشناس جاوااسکریپت هست شرکت کن. موفق باشی!