
Heute habe ich einen großartigen Blog -Beitrag von Mark Needham mit dem Titel
JavaScript: verwirrend "Anruf" und "Bewerben" gelesen. Vor einiger Zeit habe ich einen Artikel für unseren
Tech Times Newsletter über das Objekt JavaScript Argumente geschrieben. Es wurde Argumente genannt: eine JavaScript -Kuriosität. Weil es alle möglichen interessanten Verhaltensweisen hat, die nützlich sind, über die man wissen kann. Mir wurde klar, dass ich, obwohl ich sowohl Anrufe als auch bewerben konnte
In diesem Artikel hatte ich nicht über den Unterschied gesprochen.
Nun, es ist eigentlich ganz einfach. Erstens erwarten beide Methoden einen Thisarg als erstes Argument. Dies ist das Argument, das der Funktion einen Kontext verleiht; Es bestimmt den Wert des JavaScript -Schlüsselworts in der Funktion, die aufgerufen oder angewendet wird. Der einzige Unterschied besteht darin, dass die Aufrufmethode erfordert, dass Argumente separat angegeben werden. Die Antragsmethode nimmt sie als Array. Es ist klarer, wenn Sie die Syntax sehen:
function.call(thisArg[, argument1[, argument2[, ...]]]);
Nach dem Login kopieren
function.apply(thisArg[, argumentArray]);
Nach dem Login kopieren
Wenn Sie also mit dem Argumenteobjekt in Ihrem JavaScript arbeiten, können Sie eine beliebige Funktion mithilfe der Methode anwenden und einfach das vorhandene Argumenteobjekt als Array -Argument eingeben.
Hoffe das ist für dich nützlich!
Feature -Bild von Sudhamshu. Können Sie die Bedeutung erarbeiten?
häufig gestellte Fragen (FAQs) zum Funktionsaufruf und -funktion gelten in JavaScript
Was ist der Hauptunterschied zwischen Funktionsaufruf und Funktion in JavaScript? Mit der CALL () -Methode bestehen Sie individuell Argumente, die durch Kommas getrennt sind. Andererseits verlangt die Methode apply () als Array, Argumente zu übergeben. Beide Methoden ermöglichen es Ihnen, den Wert von „This“ innerhalb der Funktion zu steuern, aber die Art und Weise, wie Sie zusätzliche Parameter übergeben, unterscheidet sich. Mit der Methode call () würden Sie so etwas wie folgt tun:
Funktion add (a, b) {
zurückgeben a b;
}
console.log (add.call (null, 1, 2)); // Ausgänge: 3
und unter Verwendung der Methode apply () würde sie so aussehen:
Funktion add (a, b) {
zurückgeben a b;
}
console.log (add.apply (null, [1, 2]); // Ausgänge: 3
In beiden Fällen rufen wir die Funktion "addieren" mit "This" auf NULL (da sie in dieser Funktion nicht verwendet wird) auf, und übergeben in 1 und 2 als Argumente.
Wann sollte ich Funktionsaufruf über Funktion verwenden und umgekehrt? Wenn Sie eine Liste von Argumenten haben und ihre Nummer im Voraus nicht kennen, kann bewerben () bequemer sein, da es ein Array benötigt. Wenn Sie die Anzahl der Argumente kennen oder wenn es überhaupt keine Argumente gibt, kann Call () einfacher zu verwenden sein. Sie müssen jedoch vorsichtig sein, wenn Sie Apply () mit Konstruktorfunktionen verwenden, die mehrere Argumente erwarten. Da Apply () ein Array von Argumenten nimmt, müssen Sie sicherstellen, dass das Array die richtige Anzahl von Elementen enthält. Auf diese Weise können Sie den Kontext steuern, in dem die Funktion ausgeführt wird. Wenn Sie als erstes Argument Null oder undefiniert übergeben, wird die Funktion im globalen Kontext ausgeführt (oder im strengen Modus undefiniert). Stattdessen erben sie "dies" aus dem umgebenden Bereich. Daher hat die Verwendung von CALL () oder anwenden (), um den Wert einer Pfeilfunktion zu ändern, keinen Einfluss. Wenn Sie sich jedoch mit einer Funktion befassen, die eine große Anzahl von Argumenten annimmt, kann dies etwas langsamer sein, da sie über das Array von Argumenten iterieren müssen. Dies kann nützlich sein, wenn Sie eine Methode verwenden möchten, die auf einem Objekttyp mit einem Objekt eines anderen Typs vorhanden ist. Wenn Sie zu wenige Argumente übergeben, werden die fehlenden Argumente auf undefinierte Argumente festgelegt.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen function.call und function.apply?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!