javascriptFunction expression and callbackعبارت تابع و callback در جاوااسکریپت
عبارت تابع و callback در جاوااسکریپت را با آمادهسازی عنوان درس بشناسید؛ تفاوت تحویل تابع با فراخوانی آن و همگامبودن callback را بررسی کنید.
مفهوم به زبان ساده
تابع در جاوااسکریپت یک مقدار است؛ میتوان آن را به متغیر نسبت داد، به تابع دیگری فرستاد یا از تابعی برگرداند. وقتی function در یک عبارت، مثلاً سمت راست انتساب، قرار میگیرد، عبارت تابع داریم. نام متغیر، راهی برای دسترسی به همان مقدار تابع است. تعریف چنین مقداری به معنی اجرای بدنه نیست؛ برای اجرا باید آن را فراخوانی کنیم.
به تابعی که به بخش دیگری تحویل میدهیم تا در زمان مناسب فراخوانی کند، callback میگوییم. در مثال، prepare عنوان خام و تابع قالببندی را میگیرد. سپس formatter را با عنوان اجرا میکند و نتیجه را برمیگرداند. این نمونه کاملاً همگام است؛ وجود callback بهتنهایی نشانهٔ کار ناهمگام یا اجرای پسزمینه نیست.
در فراخوانی prepare، نام formatTitle را بدون پرانتز میفرستیم تا خود تابع تحویل داده شود. نوشتن formatTitle(...) ابتدا آن را اجرا میکند و نتیجهٔ متنی را میفرستد؛ قرارداد prepare چنین متنی را بهعنوان تابع نمیپذیرد. همچنین متغیر const را پیش از خط مقداردهی نخوانید. برای تمرین، قالببند دیگری بنویسید که عنوان را با واژهٔ «درس» آغاز کند و prepare را بدون تغییر دوباره به کار ببرید.
کجا به کار میآید؟
- جداکردن تبدیل داده از عملیاتی که آن را فراخوانی میکند
- دادن رفتار دلخواه به روشهایی مانند map و filter
از تعریف تا یک مثال واقعی
const formatTitle = function (title) {
return '[' + title.trim() + ']';
};
function prepare(title, formatter) {
return formatter(title);
}
console.log(prepare(' مبانی ', formatTitle));
console.log(typeof formatTitle);
[مبانی] function
این مثال چطور کار میکند؟
عبارت function یک مقدار تابع میسازد و const آن را با نام formatTitle نگه میدارد.
prepare خود تابع قالببندی را میگیرد، نه نتیجهٔ اجرای قبلی آن را.
formatter عنوان را پاک و داخل براکت قرار میدهد؛ خروجی به فراخواننده برمیگردد.
اشتباه رایج
callback را با فراخوانی آن اشتباه نگیرید. اگر ورودی formatter باید تابع باشد، فرستادن یک رشته یا نتیجهٔ formatTitle() میتواند هنگام اجرا خطا بسازد.
این را به خاطر بسپارید
تابع را میتوان مانند داده جابهجا کرد؛ callback نام نقش آن تابع در یک قرارداد است.