تعریف تابع (Function Definitions)
در جاوااسکریپت، «تابع (Function)» یک جعبه دستور است. ورودی می گیرد، کار انجام می دهد، و خروجی می دهد. دو راه اصلی تعریف داریم: اعلان تابع و عبارت تابع. هرکدام کاربرد خاصی دارند.
اعلان تابع (Function Declaration)
«اعلان (Declaration)» یعنی با کلمه function یک تابع نام دار بسازیم. تابع بلافاصله اجرا نمی شود. بعداً با فراخوانی اجرا می شود.
function myFunction(a, b) {
return a * b;
}
نکته: اعلان تابع معمولاً با سمی کالن تمام نمی شود؛ چون دستور اجرایی نیست.
عبارت تابع (Function Expression)
«عبارت (Expression)» یعنی تابع را داخل یک متغیر نگه داریم. این نوع معمولاً بی نام است و با نام متغیر فراخوانی می شود.
const x = function(a, b) {
return a * b;
};
const x = function(a, b) {
return a * b;
};
let z = x(4, 3);
نکته: چون این یک دستور انتساب است، در پایان سمی کالن می آید.
سازنده Function()
می توان با «سازنده (Constructor)» داخلی Function هم تابع ساخت. اما معمولاً لازم نیست.
const myFunction = new Function("a", "b", "return a * b");
let x = myFunction(4, 3);
const myFunction = function(a, b) {
return a * b;
};
let x = myFunction(4, 3);
Hoisting توابع
«هوستیگ (Hoisting)» یعنی اعلان ها به بالای محدوده منتقل می شوند. پس می توان قبل از اعلان، تابع را صدا زد. توجه: عبارت تابع هوست نمی شود.
myFunction(5);
function myFunction(y) {
return y * y;
}
تابع خوداجرا (Self-Invoking)
«خوداجرا (Self-Invoking)» یعنی تابع بلافاصله اجرا شود. برای این کار، تابع را داخل پرانتز می گذاریم و سپس () می آوریم.
(function() {
let x = "Hello!!";
})();
تابع به عنوان مقدار
تابع می تواند مقدار دهد و در عبارت ها استفاده شود. مثل ضرب نمره ها در یک ضریب.
function myFunction(a, b) {
return a * b;
}
let x = myFunction(4, 3);
function myFunction(a, b) {
return a * b;
}
let x = myFunction(4, 3) * 2;
توابع، شیء هستند
نوع تابع «function» است؛ اما رفتار شیء دارند. «property (ویژگی)» و «method (متد)» دارند.
function myFunction(a, b) {
return arguments.length;
}
function myFunction(a, b) {
return a * b;
}
let text = myFunction.toString();
گام های تمرینی
- یک اعلان تابع بساز و آن را صدا بزن.
- همان تابع را به صورت عبارت تابع بنویس.
- یک IIFE بنویس و پیامی چاپ کن.
جمع بندی سریع
- اعلان تابع هوست می شود.
- عبارت تابع در متغیر ذخیره می شود.
- Function() معمولاً لازم نیست.
- IIFE بلافاصله اجرا می شود.
- توابع ویژگی و متد دارند.
برای ادامه مسیر، بخش تاریخچه جاوااسکریپت را ببین. همچنین برای شکل کوتاه تر توابع، به Arrow Function برو. این راهنما درباره تعریف تابع جاوااسکریپت مرجع خوبی است.