--- title: Parâmetros Rest slug: Web/JavaScript/Reference/Functions/rest_parameters translation_of: Web/JavaScript/Reference/Functions/rest_parameters ---
{{jsSidebar("Functions")}}

A sintaxe de rest parameter (parâmetros rest)  nos permite representar um número indefinido de argumentos como um array.

Sintaxe

function(a, b, ...theArgs) {
  // ...
}

Descrição

Se o último argumento nomeado de uma função tiver prefixo com  ..., ele irá se tornar um array em que os elemento de 0 (inclusive) até theArgs.length (exclusivo) são disponibilizados pelos argumentos atuais passados à função.

No exemplo acima, theArgs irá coletar o terceiro argumento da função (porquê o primeiro é mapeado para a, e o segundo para b) e assim por diante em todos os argumentos consecutivos.

Diferença entre rest parametersarguments object

Há três diferenças principais entre rest parameters e os arguments objects:

De arguments para array

Rest parameters foram criados para reduzir o código padrão que foi induzida pelos argumentos

// Antes rest parameters, o seguinte codigo pode ser encontrado
function f(a, b){
  var args = Array.prototype.slice.call(arguments, f.length);

  // ...
}

// esse é o equivalente

function(a, b, ...args) {

}

Exemplos

Como  theArgs é um array, você pode pegar número de elementos usando a propriedade length:

function fun1(...theArgs) {
  console.log(theArgs.length);
}

fun1();  // 0
fun1(5); // 1
fun1(5, 6, 7); // 3

No próximo exemplo, nós usamos o rest parâmetro para buscar argumentos do segundo parâmetro para o fim. Nós multiplicamos eles pelo primeiro parâmetro:

function multiply(multiplier, ...theArgs) {
  return theArgs.map(function (element) {
    return multiplier * element;
  });
}

var arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]

O próximo exemplo mostra como você pode usar metodos do Array em rest params, mas não no objeto arguments:

function sortRestArgs(...theArgs) {
  var sortedArgs = theArgs.sort();
  return sortedArgs;
}

console.log(sortRestArgs(5,3,7,1)); // Exibe 1,3,5,7

function sortArguments() {
  var sortedArgs = arguments.sort();
  return sortedArgs; // isso nunca irá ocorrer
}

// throws a TypeError: arguments.sort is not a function
console.log(sortArguments(5,3,7,1));

a fim de usar o objeto arguments, você precisará converte-lo para um array antes.

Especificações

Especificações Status Comentário
{{SpecName('ES6', '#sec-function-definitions', 'Function Definitions')}} {{Spec2('ES6')}} Initial definition.

Compatibilidade

{{CompatibilityTable}}
Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatChrome(47)}} {{CompatVersionUnknown}} {{CompatGeckoDesktop("15.0")}} {{CompatNo}} {{CompatNo}} {{CompatNo}}
Feature Android Android Webview Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile Chrome for Android
Basic support {{CompatNo}} {{CompatChrome(45)}} {{CompatGeckoMobile("15.0")}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatChrome(47)}}

Veja também