پارامترهای اختیاری

پارامترهای اختیاری همانگونه که از اسمشان پیداست اختیاری هستند و می‌توان به آنها آرگومان ارسال کرد یا نه. این پارامترها دارای مقادیر پیشفرضی هستند. اگر به اینگونه پارامترها آرگومانی ارسال نشود از مقادیر پیشفرض استفاده می‌کنند. به مثال زیر توجه کنید :

 1: function PrintMessage(message = "Welcome to Javascript Tutorials!")
 2: {     
 3:     console.log(message);    
 4: }                            
 5:                              
 6: PrintMessage();              
 7:                              
 8: PrintMessage("Learn Javascript Today!");   
Welcome to Javascript Tutorials! 
Learn Javascript Today!

تابع PrintMessage() (خطوط 4-1) یک پارامتر اختیاری دارد. برای تعریف یک پارامتر اختیاری می‌توان به آسانی و با استفاده از علامت = یک مقدار را به یک پارامتر اختصاص داد (مثال بالا خط 1). دو بار تابع را فراخوانی می‌کنیم. در اولین فراخوانی (خط 6) ما آرگومانی به تابع ارسال نمی‌کنیم بنابراین تابع از مقدار پیشفرض (Welcome to Javascript Tutorials!) استفاده می‌کند. در دومین فراخوانی (خط 8) یک پیغام (آرگومان) به تابع ارسال می‌کنیم که جایگزین مقدار پیشفرض پارامتر می‌شود. اگر از چندین پارامتر در تابع استفاده می‌کنید، بهتر است که همه پارامترهای اختیاری در آخر بقیه پارامترها ذکر شوند. به مثالهای زیر توجه کنید.

function SomeFunction(opt1 = 10, opt2 = 20, req1, req2) //Bad

function SomeFunction(req1, opt1 = 10, req2, opt2 = 20) //Bad

function SomeFunction(req1, req2, opt1 = 10, opt2 = 20) //Good

از آنجاییکه آرگومانهایی که به توابع ارسال می شوند از سمت چپ به راست در داخل پارامترها قرار می گیرند، اگر پارامترهای اختیاری در ابتدای پارامترها قرار داده شوند، مقادیر آنها توسط آرگومان های ارسالی جایگزین می شوند. وقتی توابع با چندین پارامتر اختیاری فراخوانی می‌شوند باید به پارامترهایی که از لحاظ مکانی در آخر بقیه پارامترها نیستند، مقدار اختصاص داد. به یاد داشته باشید که نمی‌توان برای نادیده گرفتن یک پارامتر به صورت زیر عمل کرد :

function SomeFunction(required1, optional1 = 10, optional2 = 20)
{
   //Some Code
}

// ... Code omitted for demonstration

SomeFunction(10, , 100); //Error

اگر بخواهید از یک پارامتر اختیاری که در آخر پارامترهای دیگر نیست رد شوید و آن را نادیده بگیرید، به طوریکه این پارامتر از مقدار پیشفرض خود استفاده کند، باید از کلمه undefined استفاده کنید:

SomeFunction(10, undefined, 100);

تابع بالا هیچ آرگومانی برای پارامتر اختیاری optional1 ندارد بنابراین این پارامتر از مقدار پیشفرض خود یعنی 10 استفاده می‌کند.