Pergunta

Em Javascript, como se pode determinar o número de parâmetros formais definidos para uma função?

Observe que este não é o parâmetro arguments quando a função é chamada, mas o número de argumentos nomeados com os quais a função foi definida.

function zero() {
    // Should return 0
}

function one(x) {
    // Should return 1
}

function two(x, y) {
    // Should return 2
}
Foi útil?

Solução

> zero.length
0
> one.length
1
> two.length
2

Fonte

Uma função pode determinar sua própria aridade (comprimento) como este:

// For IE, and ES5 strict mode (named function)
function foo(x, y, z) {
    return foo.length; // Will return 3
}

// Otherwise
function bar(x, y) {
    return arguments.callee.length; // Will return 2
}

Outras dicas

O arity de uma função é armazenado em sua propriedade .length.

function zero() {
    return arguments.callee.length;
}

function one(x) {
    return arguments.callee.length;
}

function two(x, y) {
    return arguments.callee.length;
}

> console.log("zero="+zero() + " one="+one() + " two="+two())
zero=0 one=1 two=2

Conforme explicado em outras respostas, a propriedade length informa isso. Portanto, zero.length será 0, one.length será 1 e two.length será 2.

No ES2015, temos duas rugas:

  • As funções podem ter um parâmetro "rest" no final da lista de parâmetros que reúne quaisquer argumentos fornecidos naquela posição ou posteriormente em uma matriz verdadeira (ao contrário da pseudo-matriz arguments)
  • Os parâmetros da função podem ter valores padrão

O parâmetro "resto" não é contado ao determinar a aridade da função:

function stillOne(a, ...rest) { }
console.log(stillOne.length); // 1

Da mesma forma, um parâmetro com um argumento padrão não adiciona ao arity e, de fato, evita que qualquer outro que o siga de adicionar a ele, mesmo se eles não tiverem padrões explícitos (eles assumem que têm um padrão silencioso de undefined):

function oneAgain(a, b = 42) { }
console.log(oneAgain.length);    // 1

function oneYetAgain(a, b = 42, c) { }
console.log(oneYetAgain.length); // 1

Uma função aridade é o número de parâmetros que a função contém. Ela pode ser obtida chamando a propriedade length.

<"Exemplo:

function add(num1,num2){}
console.log(add.length); // --> 2

function add(num1,num2,num3){}
console.log(add.length); // --> 3

Observação: o número de parâmetros passados em uma chamada de função não afeta a aridade da função.

A propriedade arity usada para retornar o número de argumentos esperados pela função, no entanto, ela não existe mais e foi substituída pela propriedade Function.prototype.length.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top