Parâmetros de funções


Argumentos em funções sem parâmetros

Em JavaScript, é possível passar argumentos para uma função mesmo que ela não tenha parâmetros. Ao contrário de algumas linguagens de programação, isso não resulta em um erro, apenas ignora os argumentos não esperados.

function funcao() {
  console.log("Olá");
}
 
funcao("Oi");
 
// Saída: Olá

Propriedade arguments

A propriedade arguments é uma propriedade de objeto especial disponível dentro de funções. Ela contém todos os argumentos passados para a função, mesmo que não haja parâmetros declarados na função.

Observação

Essa propriedade não está disponível em arrow functions.

function funcao() {
  console.log(arguments);
}
 
funcao("Olá", 1, 2);
 
// Saída: [Arguments] { '0': 'Olá', '1': 1, '2': 2 }

Valor padrão dos parâmetros de uma função

Por padrão, os parâmetros que não recebem argumentos em uma chamada de função são atribuídos como undefined. Pode-se definir um valor padrão para esses parâmetros para evitar esse comportamento.

function somar(a, b = 0) {
  console.log(a + b);
}
 
somar(2);
 
// Saída: 2

Ignorar argumentos de uma função

Para pular um argumento de uma função, pode-se passar undefined como argumento para assumir o valor padrão.

function somar(a = 0, b = 1, c = 2) {
  console.log(a + b + c);
}
 
somar(2, undefined, 10);
 
// Saída: 13

Desestruturação nos parâmetros

É possível desestruturar objetos e arrays diretamente nos parâmetros da função.

// Desestruturação em objetos
function funcao({ nome, sobrenome, idade }) {
  console.log(nome, sobrenome, idade);
}
 
funcao({ nome: "Luiz", sobrenome: "Otávio", idade: 20 });
 
// Saída: Luiz Otávio 20
// Desestruturação em arrays
function funcao([nome, sobrenome, idade]) {
  console.log(nome, sobrenome, idade);
}
 
funcao(["Luiz", "Otávio", 20]);
 
// Saída: Luiz Otávio 20

Rest Operator em parâmetros

O Rest Operator (...) em parâmetros permite capturar um número indefinido de argumentos em forma de array. Esse parâmetro deve ser o último da lista.

function conta(operador, acumulador, ...numeros) {
  console.log(operador, acumulador, numeros);
 
  for (let numero of numeros) {
    if (operador === "+") acumulador += numero;
    if (operador === "-") acumulador -= numero;
    if (operador === "*") acumulador *= numero;
    if (operador === "/") acumulador /= numero;
  }
 
  console.log(acumulador);
}
 
conta("+", 0, 20, 30, 40, 50);
conta("-", 0, 20, 30, 40, 50);
conta("*", 0, 20, 30, 40, 50);
conta("/", 0, 20, 30, 40, 50);
 
/*
+ 0 [ 20, 30, 40, 50 ]
140
 
- 0 [ 20, 30, 40, 50 ]
-140
 
* 0 [ 20, 30, 40, 50 ]
0
 
/ 0 [ 20, 30, 40, 50 ]
0
*/

Referências