Heim >Web-Frontend >js-Tutorial >Wann verwenden Sie einen Funktionsausdruck im Vergleich zur Funktionserklärung
JavaScript -Funktionsdefinitionsmethode: Funktionsausdrücke und Funktionserklärungen. In diesem Artikel wird untersucht, wann Funktionsausdrücke verwendet werden sollen, wann Funktionen für Funktionserklärungen verwendet werden sollen, und die Unterschiede zwischen beiden erläutert.
Frequenzdeklarationen wurden seit langem weit verbreitet, Funktionsausdrücke haben jedoch allmählich dominiert. Viele Entwickler sind sich nicht sicher, wann sie welches verwenden müssen, was letztendlich zur falschen Wahl führt.
Es gibt einige wichtige Unterschiede zwischen Funktionsausdrücken und Funktionserklärungen. Schauen wir uns diese Unterschiede genauer an und wann können Sie Funktionsausdrücke und Funktionserklärungen in Ihrem Code verwenden.
<code class="language-javascript">function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }</code>
wird durchgeführt, wenn eine Funktion erstellt und benannt wird. Befolgen Sie nach dem Schreiben des Schlüsselworts function
den Funktionsnamen und deklarieren Sie den Namen der Funktion. Zum Beispiel:
<code class="language-javascript">function myFunction() { // 执行某些操作 };</code>
, wie Sie sehen können, deklarieren Sie beim Erstellen der Funktion den Funktionsnamen (myFunction
). Dies bedeutet, dass Sie es aufrufen können, bevor Sie die Funktion definieren.
Dies ist ein Beispiel für eine Funktionserklärung:
<code class="language-javascript">function add(a, b) { return a + b; };</code>
Funktionsausdrücke werden beim Erstellen einer Funktion und zu einer Variablen durchgeführt. Die Funktion ist anonym, was bedeutet, dass sie keinen Namen hat. Zum Beispiel:
<code class="language-javascript">let myFunction = function() { // 执行某些操作 };</code>
Wie Sie sehen können, wird die Funktion der myFunction
-Variablen zugeordnet. Dies bedeutet, dass Sie es definieren müssen, bevor Sie die Funktion aufrufen.
Dies ist ein Beispiel für einen Funktionsausdruck:
<code class="language-javascript">let add = function (a, b) { return a + b; };</code>
Es gibt einige Schlüsselunterschiede zwischen Funktionsausdrücken und Funktionserklärungen:
Ähnlich wie let
Aussagen werden Funktionserklärungen an die Spitze anderer Codes gefördert.
Funktionsausdrücke werden nicht gefördert. Dies ermöglicht es ihnen, Kopien lokaler Variablen aufzubewahren, die aus dem Zielfernrohr entnommen wurden, in dem sie definiert sind.
Normalerweise können Sie Funktionserklärungen und Funktionsausdrücke austauschbar verwenden. Manchmal führen Funktionsausdrücke jedoch zu einem leichter zu verständigen Code, ohne dass temporäre Funktionsnamen erforderlich sind.
Wann sollten Funktionsausdrücke verwendet werden und wann sollten Funktionserklärungen verwendet werden?
Die Antwort hängt von Ihren Bedürfnissen ab. Wenn Sie eine flexiblere Funktion oder eine Funktion benötigen, die nicht gefördert wird, sind Funktionsausdrücke die beste Wahl. Wenn Sie eine lesbarere und verständlichere Funktion benötigen, verwenden Sie die Funktionserklärung.
Wie Sie sehen, sind die beiden Syntaxen ähnlich. Der offensichtlichste Unterschied besteht darin, dass Funktionsausdrücke anonym sind, während Funktionserklärungen berühmt sind.
Heutzutage werden in der Regel die Funktionserklärung verwendet, wenn Sie etwas tun müssen, was ein Funktionsausdruck kann. Wenn Sie keine Vorgänge ausführen müssen, die nur mit einer Funktionserklärung durchgeführt werden können, ist es normalerweise besser, Funktionsausdrücke zu verwenden.
Verwenden Sie die Funktionserklärung, wenn Sie eine rekursive Funktion erstellen müssen oder eine Funktion aufrufen müssen, bevor Sie sie definieren. Wenn Sie beides nicht beides tun müssen, verwenden Sie Funktionsausdrücke, um Cleaner -Code zu schreiben.
Es gibt einige wichtige Vorteile für die Verwendung von Funktionserklärungen.
Funktionsausdrücke haben auch einige Vorteile.
In den meisten Fällen ist es leicht zu bestimmen, welche Methode für Ihre Bedürfnisse am besten geeignet ist. Diese Richtlinien helfen Ihnen dabei, in den meisten Fällen schnell Entscheidungen zu treffen.
Verwendungsfunktionserklärungen in den folgenden Fällen:
Verwenden Sie Funktionsausdrücke in den folgenden Fällen:
dh in vielen Fällen wird die Flexibilität von Funktionsausdrücken zu einem leistungsfähigen Vorteil.
Es gibt viele Möglichkeiten, Ausdrücke zu funktionieren, nützlicher als Funktionserklärungen.
Schließungen können verwendet werden, wenn Sie vor der Ausführung Parameter an eine Funktion übergeben möchten. Ein gutes Beispiel dafür, wie dies Ihnen zugute kommt, wenn Sie durch den Nodelist schauen.
Closeure ermöglicht es Ihnen, zusätzliche Informationen wie Indizes beizubehalten, wenn die Informationen nach Ausführung der Funktion nicht verfügbar sind.
<code class="language-javascript">function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }</code>
Der zusätzliche Ereignishandler wird später ausgeführt (nach dem Ende des Schleifens), sodass der Verschluss erforderlich ist, um den entsprechenden Wert der for
-Klobe zu erhalten.
<code class="language-javascript">function myFunction() { // 执行某些操作 };</code>
Es ist einfacher zu verstehen, warum das Problem durch Extrahieren der for
-Funktion aus der doSomething()
-Schichtung auftritt.
<code class="language-javascript">function add(a, b) { return a + b; };</code>
Die Lösung hier besteht darin, den Index als Funktionsparameter an die externe Funktion zu übergeben, damit er den Wert an die interne Funktion übergeben kann. In der Regel werden die Informationen angezeigt, die Sie für die Organisation interner Rückgabefunktionen benötigen.
<code class="language-javascript">let myFunction = function() { // 执行某些操作 };</code>
Erfahren Sie mehr über das Schließen von Paketen und deren Verwendung.
Funktionsausdrücke können direkt an die Funktion übergeben werden, ohne dass die Werte den intermediierten temporären Variablen zuweisen müssen.
Sie sehen sie am häufigsten in Form von anonymen Funktionen. Hier ist ein bekanntes Beispiel für den Ausdruck von JQuery -Funktionen:
<code class="language-javascript">let add = function (a, b) { return a + b; };</code>
Funktionsausdrücke werden auch verwendet, um Arrayelemente zu verarbeiten, wenn Methoden wie forEach()
verwendet werden.
Sie müssen auch keine namenlosen anonymen Funktionen sein. Es ist am besten, Funktionsausdrücke zu nennen, um auszudrücken, welche Funktionen erfüllen sollten, und um Debugs zu helfen:
<code class="language-javascript">function tabsHandler(index) { return function tabClickEvent(evt) { // 对选项卡执行操作。 // 可以从此处访问 index 变量。 }; } let tabs = document.querySelectorAll('.tab'), i; for (i = 0; i < tabs.length; i += 1) { tabs[i].onclick = tabsHandler(i); }</code>
iife hilft, zu verhindern, dass Ihre Funktionen und Variablen den globalen Bereich beeinflussen.
Alle Eigenschaften darin liegen im Rahmen der anonymen Funktionen. Dies ist ein gemeinsames Muster, um unerwartete oder unerwünschte Nebenwirkungen von Code an anderer Stelle zu verhindern.
Es wird auch als Modulmodus verwendet, um Codeblöcke in leicht verwaltete Abschnitte aufzunehmen. Wir untersuchen diese eingehenderen, um das Geheimnis von JavaScript-Schließungen, Rückrufen und IIFE aufzudecken.
Dies ist ein einfaches Beispiel für iife:
<code class="language-javascript">function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }</code>
… Wenn der Code als Modul verwendet wird, kann er leicht verwaltet werden.
<code class="language-javascript">function myFunction() { // 执行某些操作 };</code>
Wie wir sehen können, unterscheiden sich Funktionsausdrücke nicht grundlegend von Funktionserklärungen, aber sie können häufig sauberere, lesbarere Code erzeugen.
Sie sind weit verbreitet, was sie zu einem wesentlichen Bestandteil jeder Entwickler -Toolbox macht. Verwenden Sie Funktionsausdrücke in Ihrem Code auf eine interessante Weise, die ich oben nicht erwähnt habe? Bitte lassen Sie es mich in den Kommentaren wissen!
Der Hauptunterschied zwischen Funktionsausdrücken und Funktionserklärungen ist die Art und Weise, wie die JavaScript -Engine sie interpretiert. Funktionserklärungen werden analysiert, bevor ein Code ausgeführt wird. Dies bedeutet, dass Sie Funktionen aufrufen können, die später in Ihrem Code deklariert sind. Dies wird als Funktionsheben bezeichnet. Andererseits werden Funktionsausdrücke nicht gefördert und können daher nicht vor der Definition aufgerufen werden.
hier ist natürlich ein Beispiel von jedem:
Funktionserklärung:
<code class="language-javascript">function add(a, b) { return a + b; };</code>
Funktionsausdruck:
<code class="language-javascript">let myFunction = function() { // 执行某些操作 };</code>
Wenn Sie Funktionen erstellen müssen, die in Ihrem Code verwendet werden, werden normalerweise Funktionserklärungen verwendet, da sie an die Spitze des Geltungsbereichs befördert werden. Dies bedeutet, dass Sie die Funktion aufrufen können, bevor Sie sie in Ihrem Code deklarieren. Funktionsausdrücke dagegen werden normalerweise für Funktionen verwendet, die nur eine oder eine endliche Anzahl von Malen erfordern oder wenn eine Funktion als Argument an eine andere Funktion übergeben wird.
Ja, Funktionsausdrücke können benannt werden. Dies ist sehr nützlich für das Debuggen, da der Name der Funktion in der Stapelspur angezeigt wird. Hier ist ein Beispiel:
<code class="language-javascript">let add = function (a, b) { return a + b; };</code>
Funktionsförderung in JavaScript ist ein Verhalten, bei dem eine Funktionserklärung während der Kompilierungsphase auf den Spitzenbereich ihres Geltungsbereichs verschoben wird (bevor der Code ausgeführt wird). Dies bedeutet, dass Sie die Funktion aufrufen können, bevor Sie sie in Ihrem Code deklarieren. Es ist jedoch zu beachten, dass Funktionsausdrücke (sogar Ausdrücke, die Variablen zugewiesen sind) nicht gefördert werden.
Aufrufen des Funktionsausdrucks sofort (IIFE) ist ein Funktionsausdruck, der unmittelbar nach seiner Definition ausgeführt wird. Die Syntax von IIfe lautet wie folgt:
<code class="language-javascript">function tabsHandler(index) { return function tabClickEvent(evt) { // 对选项卡执行操作。 // 可以从此处访问 index 变量。 }; } let tabs = document.querySelectorAll('.tab'), i; for (i = 0; i < tabs.length; i += 1) { tabs[i].onclick = tabsHandler(i); }</code>
Während Funktionsausdrücke und Funktionserklärungen normalerweise austauschbar verwendet werden, müssen einige wichtige Unterschiede beachten. Funktionserklärungen werden gefördert, was bedeutet, dass sie vor der Erklärung aufgerufen werden können. Andererseits werden Funktionsausdrücke nicht gefördert und können daher nicht vor der Definition aufgerufen werden. Darüber hinaus können Funktionsausdrücke anonym oder benannt werden, während Funktionserklärungen immer benannt werden müssen.
Funktionsausdrücke bieten einige Vorteile. Sie können anonym sein, auf selbsterklärbare (sofort Ausdrucksformen der Anruffunktion) eingestellt und Variablen zugewiesen und herumgegeben werden. Dies macht Funktionsausdrücke sehr geeignet für die Verwendung als Verschluss und Rückruffunktionen.
Im Allgemeinen sind die Leistungsunterschiede zwischen Funktionsausdrücken und Funktionserklärungen vernachlässigbar und beeinflussen wahrscheinlich nicht die Leistung des JavaScript -Code. Die Auswahl der Funktionsausdrücke und Funktionserklärungen sollte auf Ihren spezifischen Anwendungsfall- und Codierungsstileinstellungen basieren.
Ja, Funktionsausdrücke werden häufig verwendet, um Verschlüsse in JavaScript zu erzeugen. Ein Verschluss ist eine Funktion, die auf seinen eigenen Bereich, den Umfang externer Funktionen und den globalen Umfang zugreifen kann. Hier ist ein Beispielverschluss, das mit Funktionsausdrücken erstellt wurde:
<code class="language-javascript">function funcDeclaration() { return '函数声明'; } let funcExpression = function () { return '函数表达式'; }</code>
Das obige ist der detaillierte Inhalt vonWann verwenden Sie einen Funktionsausdruck im Vergleich zur Funktionserklärung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!