Rest parameters

Rest parameters امکان ارسال تعداد دلخواه پارامترهای همنوع و ذخیره آنها در یک آرایه ساده را فراهم می‌آورد. برای ایجاد تابعی که به تعداد دلخواه پارامتر دریافت کند، از علامت سه نقطه (…) به صورت زیر استفاده می‌شود :

function functionName (... vaiableName)
{
   ...
}

همانطور که در کد بالا مشاهده می کنید، کافیست، آرگومان هایی که تابع قرار است دریافت کن را به صورت vaiableName … بنویسید. یعنی علامت سه نقطه (…) و به دنبال آن نام پارامتر را ذکر کنید. به مثال زیر توجه کنید:

 1: function CalculateSum(... numbers)
 2: {                                 
 3:     var total = 0;                
 4: 
 5:     for (var number of numbers)   
 6:     {                             
 7:         total += number;          
 8:     }                             
 9: 
10:     return total;                 
11: }                                 
12: 
13: console.log("1 + 2 + 3 = ", CalculateSum(1, 2, 3));              
14: 
15: console.log("1 + 2 + 3 + 4 = ", CalculateSum(1, 2, 3, 4));       
16: 
17: console.log("1 + 2 + 3 + 4 + 5 = ", CalculateSum(1, 2, 3, 4, 5));
1 + 2 + 3         = 6 
1 + 2 + 3 + 4     = 10 
1 + 2 + 3 + 4 + 5 = 15 

همانطور که در مثال بالا مشاهده می‌کنید، یک تابع به نام ()CalculateSum در خط 1 تعریف شده است. برای اینکه این تابع تعداد دلخواه پارامتر دریافت کند، از علامت سه نقطه (…) قبل از نوع داده‌ای پارامتر آن استفاده شده است. در اصل کلمه numbers یک آرایه است، که وقتی ما آرگومان‌ها را به تابع ارسال می‌کنیم، در این آرایه ذخیره می‌شوند. حال تابع را سه بار با تعداد مختلف آرگومانها فراخوانی می‌کنیم و سپس با استفاده از حلقه for/of این آرگومانها را جمع و به تابع فراخوان برگشت می‌دهیم. وقتی از چندین پارامتر در یک تابع استفاده می‌کنید، فقط یکی از آنها باید دارای علامت سه نقطه (…) بوده و همچنین از لحاظ مکانی باید آخرین پارامتر باشد. اگر این پارامتر (پارامتری که دارای سه نقطه است) در آخر پارامترهای دیگر قرار نگیرد و یا از چندین پارامتر سه نقطه دار استفاده کنید با خطا مواجه می‌شوید. به مثالهای اشتباه و درست زیر توجه کنید :

function SomeFunction(... x, y) //ERROR

function SomeFunction(x , ... y) //Correct