Ottieni l'aria di una funzione
-
27-10-2019 - |
Domanda
In JavaScript, come si può determinare il numero di parametri formali definiti per una funzione?
Nota, questo non è il arguments
parametro quando viene chiamata la funzione, ma il numero di argomenti nominati con cui è stata definita la funzione.
function zero() {
// Should return 0
}
function one(x) {
// Should return 1
}
function two(x, y) {
// Should return 2
}
Soluzione
> zero.length
0
> one.length
1
> two.length
2
Una funzione può determinare la propria arity (lunghezza) in questo modo:
// 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
}
Altri suggerimenti
L'aria di una funzione è memorizzata nel suo .length
proprietà.
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
Come è trattato in altre risposte, il length
La proprietà te lo dice. Così zero.length
sarà 0, one.length
sarà 1, e two.length
sarà 2.
A partire da ES2015, abbiamo due rughe:
- Le funzioni possono avere un parametro "riposo" alla fine dell'elenco dei parametri che raccoglie qualsiasi argomento fornito in quella posizione o successivamente in un vero array (a differenza del
arguments
pseudo-array) - I parametri della funzione possono avere valori predefiniti
Il parametro "REST" non viene conteggiato quando si determina l'arity della funzione:
function stillOne(a, ...rest) { }
console.log(stillOne.length); // 1
Allo stesso modo, un parametro con un argomento predefinito non si aggiunge a Arity, e in effetti impedisce a tutti gli altri di seguirlo di aggiungerlo anche se non hanno impostazioni predefinite esplicite (si presume abbiano un default silenzioso di undefined
):
function oneAgain(a, b = 42) { }
console.log(oneAgain.length); // 1
function oneYetAgain(a, b = 42, c) { }
console.log(oneYetAgain.length); // 1
Una funzione Arity è il numero di parametri che la funzione contiene. È possibile raggiungere chiamando la proprietà di lunghezza.
Esempio:
function add(num1,num2){}
console.log(add.length); // --> 2
function add(num1,num2,num3){}
console.log(add.length); // --> 3
Nota: il numero di parametri passati in una chiamata di funzione non influisce sull'aria della funzione.
La proprietà Arity utilizzata per restituire il numero di argomenti previsti dalla funzione, tuttavia non esiste più ed è stata sostituita dalla proprietà Function.Prototype.Length.