2 Stimmen

Übergabe von Funktionen an jQuery mit fehlenden Parametern

Ich habe bemerkt, dass manchmal, wenn ich eine Callback-Funktion in jQuery übergeben, kann ich weg mit nicht mit der Funktion alle Parameter angeben zu bekommen.

Zum Beispiel, in der .each() Funktion nimmt eine Funktion mit den Parametern index,Element . Sie können jedoch auch weniger Parameter verwenden, wie im ersten Beispiel im Abschnitt Dokumentation : $('li').each(function(index){...} .

Wann ist das gültig? Und warum ist dies syntaktisch gültig?

6voto

robbrit Punkte 16948

In Javascript müssen Sie nicht alle Parameter an eine Funktion übergeben. Wenn Sie keinen übergeben, hat die Funktion den Standardwert "undefiniert".

3voto

jfriend00 Punkte 632952

JQuery untersucht den Typ der übergebenen Parameter und findet heraus, was Sie gemeint haben. Das gibt Ihnen eine gewisse Flexibilität, was Sie einschließen. Dies funktioniert nur, wenn die erwarteten Parameter von einem anderen Typ sind. Wenn Sie zum Beispiel drei mögliche Parameter für eine Funktion haben: eine Zeichenkette, eine Zahl und eine Funktion, dann kann die empfangende Funktion den Typ jedes Parameters untersuchen und herausfinden, welcher der richtige ist, unabhängig von der Reihenfolge, in der sie übergeben werden oder welche Parameter enthalten sind.

In jQuery gibt es in der Regel nur einen Parameter, der eine Funktion ist, so kann jQuery ziemlich viel finden, egal wo es in der Parameterliste ist.

Wenn die Funktion hingegen zwei Zeichenketten oder zwei Funktionen als Parameter erhält, müssen diese in der richtigen Reihenfolge übergeben werden, damit die empfangende Funktion weiß, welche die richtige ist.

Dies kann in Javascript funktionieren, weil:

  1. Wenn ein Parameter nicht an eine Funktion übergeben wird, setzt Javascript das resultierende Argument für die Funktion einfach auf "undefiniert", so dass die aufrufende Funktion sehen kann, dass es beim Aufruf fehlte.
  2. Javascript erlaubt es, die Typen von Variablen zu untersuchen, so dass in diesem Fall die aufrufende Funktion die verschiedenen Typen dessen, was übergeben wurde, betrachten und ihr Verhalten ändern kann.

Wenn Sie sich die Funktion click() ansehen, sehen Sie, dass jQuery drei Möglichkeiten hat, sie zu verwenden:

.click()
.click( handler(eventObject) )
.click( [eventData,] handler(eventObject) )

Intern ist die Click-Funktion in jQuery wie folgt deklariert:

function (data, handler)

Dann, wenn diese Funktion aufgerufen wird jQuery schaut auf die Parameter Daten und Handler und bestimmt, dass, wenn beide Parameter undefiniert sind, dann muss der Aufrufer getan haben:

.click();

Wenn nur der Handler-Parameter undefiniert ist und der Daten-Parameter definiert und ein Funktionstyp ist, dann muss der Aufrufer die zweite Form von verwendet haben:

.click(handler)

In diesem Fall tut jQuery dies intern, um die Parameter in die richtigen Slots zu setzen, bevor sie verwendet werden:

handler = data;
data = null;

Wenn beide Parameter nicht undefiniert sind, muss der Aufrufer sie verwendet haben:

.click(data, handler)

und es kann beide Parameter wie angegeben verwenden.

1voto

Pointy Punkte 387467

Sie ist immer gültig. Eine Funktionsdeklaration in JavaScript enthält Namen für Parameter, legt aber ansonsten nicht fest, wie die Funktion aufgerufen werden kann. Mit anderen Worten: Funktionen haben keine "Typsignatur" wie in einigen anderen Sprachen.

Eine Funktion kann immer mit beliebig vielen Parametern aufgerufen werden, unabhängig davon, wie sie definiert wurde.

1voto

ShankarSangoli Punkte 68964

Dies ist eine Funktion von JavaScript und nicht von jQuery. Sie können eine beliebige Anzahl von Parametern übergeben, wenn Sie die Funktion aufrufen. Nun hängt es von der Funktion ab, wonach Sie suchen. Außerdem können Sie die Funktionsparameter mit dem Schlüsselwort arguments abrufen.

0voto

James Montagne Punkte 75564

Sie ist immer gültig. In Javascript kann man jede Funktion mit mehr oder weniger Parametern als definiert aufrufen. Ihre Funktion, die keine Parameter angibt, bekommt also trotzdem diese zwei Parameter übergeben. Sie können sogar den Wert der Parameter sehen, indem Sie arguments . arguments[0] wird index , usw.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X