2011-01-31 9 views
49

W JavaScript, jak można określić liczbę formalnych parametrów zdefiniowanych dla funkcji?Zdobądź niezawodność funkcji

Uwaga: nie jest to parametr arguments podczas wywoływania funkcji, ale liczba nazwanych argumentów, dla których funkcja została zdefiniowana.

function zero() { 
    // Should return 0 
} 

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

function two(x, y) { 
    // Should return 2 
} 
+1

Co to jest arity funkcji() {return arguments [0]; }? – AtnNn

+5

@atnnn 0, oczywiście. – Phrogz

Odpowiedz

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

Source

Funkcja może określić własną arity (długość) tak: arity

// 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 
} 
+0

Zamierzałem odpowiedzieć na moje własne pytanie, ponieważ nie było na Stack Overflow, ale mnie do tego przekonałeś! Zaktualizuję twoją odpowiedź za pomocą techniki dla funkcji określającej jej własny stan. – JasonSmith

+0

Masz na myśli 'arguments.callee.length'? – Phrogz

+0

Tak, miałem na myśli. – JasonSmith

11

funkcją jest przechowywany w jego .length nieruchomości.

4

Tak jak opisano w innych odpowiedziach, właściwość length mówi o tym. Więc zero.length będzie 0, one.length będzie 1, a two.length będzie 2.

As of ES2015, mamy dwie zmarszczki:

  • Funkcje mogą mieć parametr "odpoczynku" na końcu parametru lista, która gromadzi się żadnych argumentów podanych w tej pozycji nim lub później do prawdziwej tablicy (w przeciwieństwie do pseudo-tablicy arguments)
  • parametry funkcyjne mogą mieć wartości domyślne

w „res parametr T”nie jest brany pod uwagę podczas wyznaczania Arity funkcji:

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

Podobnie parametr z domyślnym argument nie dodawać do Arity, w rzeczywistości zapobiega innym po to dodawanie do niego, nawet jeśli nie mają one wyraźne domyślne (oni założyć mieć cichą domyślną undefined):

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

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

+0

Dzięki! To wspaniała aktualizacja. Myślę, że dla '... rest', podczas gdy ukrywa prawdziwą arytę, właściwość' .length' jest nadal użyteczna. Ale czy w przypadku parametrów domyślnych znasz jakieś obejścia, czy nawet po prostu sposób na wykrycie, że parametry domyślne są w ogóle używane? – JasonSmith

+0

@JasonSmith: Nic, co nie polega na dekompilacji (np. 'Funkcja # doString'). –

0

Funkcja jest liczbą parametrów zawartych w funkcji. Można ją uzyskać, wywołując właściwość length.

Przykład:

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

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

Uwaga: ilość parametrów przekazanych w wywołaniu funkcji nie wpływa arity funkcji.

0

Właściwość arity używana do zwracania liczby argumentów oczekiwanych przez funkcję, jednak już nie istnieje i została zastąpiona przez właściwość Function.prototype.length.