JavaScript:تعریف تابع در جاوااسکریپت
توابع در جاوااسکریپت با کلمه کلیدیfunction
تعریف میشوند.[۱]
شما میتوانید از تعریف یک تابع یا یک عبارت تابع استفاده کنید.
محتویات
تعریف توابع
در فصلهای قبلی این آموزش، شما یادگرفتید که توابع با شیوه نوشتار یا syntax زیر تعریف میشوند:
function functionName(parameters) {
// code to be executed
}
توابع تعریف شده به سرعت اجرا نمیشوند. آنها «برای استفاده در آینده ذخیره میشوند» و هنگامی که آنها فراخوانی شدند، اجرا میگردند.
مثال
function myFunction(a, b) {
return a * b;
}
![]() | نقطه ویرگول ; برای جداسازی عبارتهای قابل اجرای جاوااسکریپت استفاده میشود. تا زمانی که تعریف یک تابع از نوع قابل اجرا نباشد، استفاده از نقطه ویرگول ; در انتهای آن مرسوم نیست. |
عبارت توابع
یک تابع جاوااسکریپت را نیز میتوان با یک عبارت تعریف کرد.
یک عبارت تابع میتواند در یک متغیرذخیره شود:
مثال
var x = function (a, b) {return a * b};
بعد ازآن که عبارت تابع در یک متغیر ذخیره شد، میتوان از آن متغیر همانند یک تابع استفاده کرد:
مثال
var x = function (a, b) {return a * b};
var z = x(4, 3);
تابع فوق یک تابع ناشناس (به انگلیسی: anonymous function) (تابع بدون نام) است.
توابعی که درون متغیرها ذخیره میشوند نام نیاز ندارند. آنها با استفاده از نام متغیر اجرا (فراخوانی) میشوند.
![]() | تابع فوق با یک نقطه ویرگول ; به پایان میرسد زیرا که این بخشی از یک عبارت قابل اجراست. |
متد سازنده ()Function
همانطور که در مثال قبل میبینید، توابع جاوااسکریپت با کلمه کلیدیfunction
تعریف میشوند.
همچنین توابع را میتوان بافراخوانی متد سازنده تابع یعنیFunction()
نیز تعریف کرد.
مثال
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
شما مجبور نیستید که از سازنده تابع استفاده کنید. مثال بالا همانند مثال زیر است:
مثال
var myFunction = function (a, b) {return a * b};
var x = myFunction(4, 3);
![]() | بیشتر اوقات، شما میتوانید از استفاده از کلمهٔnew در جاوااسکریپت پرهیز کنید. |
جابهجایی توابع (به انگلیسی: Hoisting)
در فصلهای قبلی این آموزش، شما در مورد جابهجایی (به انگلیسی: "hoisting") در جاوااسکریپت مطالبی را آموختید.
جابهجایی (به انگلیسی: "hoisting") رفتار پیشفرض جاوااسکریپت برای جابهجا کردن تعاریف به بالای ناحیه کد جاری است.
این جابهجایی روی تعاریف متغیرها و تعاریف توابع اعمال میشود.
به خاطر این امر، توابع جاوااسکریپت را میتوان قبل از تعریف آنها، استفاده کرد:
myFunction(5);
function myFunction(y) {
return y * y;
}
توابعی که با استفاده از یک عبارت تعریف میشوند، جابهجا نمیشوند.
توابع خود اجرا
توابع میتوانند به صورت خودکار «خود اجرا» تعریف شوند.
یک تابع خوداجرا، بدون اینکه فراخوانی شود، اجرا میشود.
تابعهایی که با یک عبارت تعریف شدهاند در صورتی که عبارت با ( ) نوشته شود به صورت خودکار اجرا خواهند شد.
شما نمیتوانید یک تعریف تابع را به صورت تابع خود اجرا تعریف کنید.
شما باید اطراف تابع پرانتزها را اضافه کنید تا مشخص کنید که این تابع تک عبارتی است:
(function () {
var x = "Hello!!"; // I will invoke myself
})();
تابع بالا یک تابع خود اجرای ناشناس (بدون نام) است.
توابع را میتواند همانند مقادیر استفاده کرد
توابع جاوااسکریپت را میتوان همانند مقادیر استفاده کرد:
مثال
function myFunction(a, b) {
return a * b;
}
var x = myFunction(4, 3);
توابع جاوااسکریپت را میتوان در عبارتهای جاوااسکریپت استفاده کرد:
مثال
function myFunction(a, b) {
return a * b;
}
var x = myFunction(4, 3) * 2;
توابع نیز نوعی اشیاء هستند
عملگرtypeof
در جاوااسکریپت برای توابع مقدار "functions" را برمیگرداند.
اما توابع جاوااسکریپت را میتوان به بهترین شکل همانند اشیاء تعریف کرد.
توابع جاوااسکریپت هر دو یعنی ویژگیها و متدها را دارا هستند.
ویژگیarguments.length
تعداد آرگومانهایی که زمان اجرای تابع، تابع دریافت کردهاست را مشخص میکند:
مثال
function myFunction(a, b) {
return arguments.length;
}
متدtoString()
تابع را به صورت یک رشته متنی برمیگرداند:
مثال
function myFunction(a, b) {
return a * b;
}
var txt = myFunction.toString();
![]() | تابعی که به صورت یک ویژگی از یک شیء تعریف شدهاست، متد آن شیء نامیده میشود. تابعی که برای ساخت اشیاء جدید طراحی شدهاست، سازنده شیء یا object constructor نامیده میشود. |
تعریف تابع به صورت پیکان یا فلش
تعریف تابع به صورت پیکان یا فلش این اجازه را به شما میدهد که از شیوه نوشتار کوتاه تری برای تعریف تابع استفاده کنید.
شما نیازی به کلمه کلیدیfunction
، کلمه کلیدیreturn
و یک جفت آکولادها { } ندارید.
مثال
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
توابع به صورت پیکان یا فلش کلمه کلیدیthis
مربوط به خود را ندارند. آنها برای استفاده به عنوان متدهای شیء مناسب نیستند.
توابع به صورت پیکان یا فلش جابهجا نمیشوند. آنها میبایست قبل از استفاده از آنها، تعریف شوند.
استفاده از کلمهconst
روش مطمئن تری نسبت به استفاده از کلمهvar
است، زیرا که یک تابع تکجملهای یا تکعبارتی همیشه یک مقدار ثابت را برمیگرداند.
در صورتی تابع شما تک جمله ای است شما فقط میتوانید کلمه کلیدیreturn
و جفت آکولادها { } را ننویسید، به خاطر این امر، عادت خوبی است اگر آنها را به صورت زیر بنویسیم:
مثال
const x = (x, y) => { return x * y };
![]() | توابع به صورت فلش یا پیکان در مرورگر اینترنت اکسپلور ورژن ۱۱ یا قدیمی تر پشتیبانی نمیشود. |
منابع آموزشی