Orlok: function mit beliebig vielen Übergabeparametern

Beitrag lesen

Hallo Felix

function myfirsttest (immer, beliebig_1, beliebig_2, beliebig_3, beliebig_x)

dafür notiert man überhaupt kein Argument (so lautet Dein Stichwort!), sondern ermittelt innerhalb der Funktion mittels arguments, wieviele Argumente beim Aufruf übertragen wurden.

Was hier wohl verlangt ist, ist ein formaler Parameter und die Möglichkeit darüber hinaus eine unbestimmte Anzahl weiterer Argumente entgegenzunehmen, was ich in modernem JavaScript unter Verwendung der Syntax für Restparameter so schreiben würde:

function name (param, ...rest) {
  console.log(rest.length);
  return param;
}

const value = name(16, 32, 64); // 2

console.log(value); // 16

Hierbei kann der formale Parameter innerhalb der Funktion direkt über seinen Bezeichner angesprochen werden und alle weiteren, gegebenenfalls beim Aufruf übergebenen Argumente werden in einem Array gespeichert, dass über den Bezeichner des Restparameters referenziert werden kann. Allerdings ist diese Syntax noch nicht flächendeckend implementiert.

function name (param) {
  var rest = [ ].slice.call(arguments, 1);
  console.log(rest.length);
  return param;
}

var value = name(16, 32, 64); // 2

console.log(value); // 16

Das gleiche Ergebnis kann man aber auch erzielen, indem man nur einen Parameter notiert und dann die Arraymethode slice im Kontext von arguments aufruft. Dabei wird die Funktionsvariable arguments als erstes Argument an call übergeben. Der zweite an call übergebene Wert ist dann das erste Argument für die Methode slice, welches den Index des ersten berücksichtigten Elementes angibt.

Wird wie hier 1 übergeben, wird das erste an die Funktion übergebene Argument für das Array mit den restlichen Argumenten nicht berücksichtigt, das heißt dieses enthält, sofern mehr als ein Argument übergeben wurde, alle Argumente außer demjenigen, mit dem der formale Paramter initialisiert wurde.

function name (param) {
  // do something
}

console.log(name.length); // 1

Das hat den Vorteil, dass man über die Abfrage der Eigenschaft length der Funktion die Anzahl der formalen Parameter ermitteln kann, zu denen angegebene Restparameter wie im ersten Beispiel oben nicht hinzugezählt werden.

Viele Grüße,

Orlok