


Eine kurze Diskussion über Abschlüsse in Javascript_Javascript-Kenntnissen
Ich habe Abschlüsse lange Zeit nicht verstanden. Später habe ich etwas über den Umfang und das damit verbundene Problem gelernt, bevor ich das Wissen über Abschlüsse verstanden habe.
Der Abschluss ist auch eine häufige Frage im Vorstellungsgespräch. Vereinfacht ausgedrückt handelt es sich um eine verschachtelte Funktion.
Funktion als Rückgabewert:
function foo () { var a = 1; return function () { a++; console.log(a); } } var aaa = foo(); aaa(); //2 aaa(); //3
Tatsächlich ist dieser Code nicht schwer zu verstehen, aaa zeigt auf eine neue Funktion, die von foo() zurückgegeben wird, aber die Variable a wird in dieser Funktion referenziert, sodass die Variable a immer noch vorhanden ist, wenn die foo-Funktion ausgeführt wird den Speicher und wird nicht freigegeben. Das heißt, a ist 2 bzw. 3.
Funktion als Parameter:
var a = 10; function foo () { console.log(a); } function aaa(fn) { var a = 100; fn(); } aaa(foo);
Wenn die fn-Funktion in der aaa-Funktion ausgeführt wird, gehen Sie nach meinem bisherigen Verständnis zum übergeordneten Bereich, um die a-Variable zu finden. Ist das Ergebnis 100?
Leider lautet die Antwort „Nein“. Der Blog von Lehrer Wang Fupeng erklärt es besser. Er sagte, dass der Bereichswert dieser Funktion anstelle des „übergeordneten Bereichs“ erstellt werden sollte.
Nutzungsszenarien von Schließungen
Da ich noch relativ neu bin, werde ich hier ein einfaches Beispiel nehmen. Wenn Sie auf li klicken, wird die Position von li in ul angezeigt, bei der es sich um den Indexwert handelt.
HTML-Code:
<ul> <li>001</li> <li>002</li> <li>003</li> </ul>
JS-Code:
Beispiel 1:
Bitte schauen Sie sich den Code unten an. Nachdem Sie ihn ausgeführt haben, stellen Sie fest, dass das Ergebnis 3 ist, egal auf welches Li geklickt wird.
var aLi = document.getElementsByTagName('li'); for (var i = 0; i<aLi.length; i++) { aLi[i].onclick = function() { alert(i); } }
Da es in der anonymen Funktion keine i-Variable gibt, klicken wir zum Zeitpunkt des Endes auf das li-Tag der Seite. Zu diesem Zeitpunkt ist i bereits 3.
Beispiel 2:
aLi[i].onclick = (function(i){ return function(){ alert(i); } })(i);
Diesmal besteht die Methode darin, die Funktion als Rückgabewert zu verwenden und die Variable i über die Parameter der selbstausführenden Funktion zu übergeben. Da sich die Rückgabefunktion dann auf die i-Variable bezieht, wird die i-Variable dies nicht tun freigegeben werden, wenn die for-Schleife endet. Das heißt, der Wert der Variablen i wird im Speicher gespeichert. Basierend auf diesem Prinzip kann es in niedrigeren IE-Versionen leicht zu Speicherverlusten kommen.
Beispiel 3:
for (var i = 0; i<aLi.length; i++) { (function(i){ aLi[i].onclick = function(){ alert(i); } })(i); }
Dieses Prinzip ähnelt dem oben genannten.
Fragen zum Front-End-Abschlussinterview mit Xiaomi:
function repeat (func, times, wait) { } //这个函数能返回一个新函数,比如这样用 var repeatedFun = repeat(alert, 10, 5000) //调用这个 repeatedFun ("hellworld") //会alert十次 helloworld, 每次间隔5秒
Meine Antwort:
function repeat (func, times, wait) { return function(str) { while (times >0) { setTimeout(function(){ func(str); },wait); times--; } } } var repeatedFun = repeat(alert, 10, 100); repeatedFun ("hellworld");
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für alle hilfreich sein, die das Schließen von Javascript lernen.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In C++ ist ein Abschluss ein Lambda-Ausdruck, der auf externe Variablen zugreifen kann. Um einen Abschluss zu erstellen, erfassen Sie die äußere Variable im Lambda-Ausdruck. Abschlüsse bieten Vorteile wie Wiederverwendbarkeit, Ausblenden von Informationen und verzögerte Auswertung. Sie sind in realen Situationen nützlich, beispielsweise bei Ereignishandlern, bei denen der Abschluss auch dann noch auf die äußeren Variablen zugreifen kann, wenn diese zerstört werden.

C++-Lambda-Ausdrücke unterstützen Abschlüsse, die Funktionsbereichsvariablen speichern und sie für Funktionen zugänglich machen. Die Syntax lautet [capture-list](parameters)->return-type{function-body}. Capture-Liste definiert die zu erfassenden Variablen. Sie können [=] verwenden, um alle lokalen Variablen nach Wert zu erfassen, [&], um alle lokalen Variablen nach Referenz zu erfassen, oder [Variable1, Variable2,...], um bestimmte Variablen zu erfassen. Lambda-Ausdrücke können nur auf erfasste Variablen zugreifen, den ursprünglichen Wert jedoch nicht ändern.

Ein Abschluss ist eine verschachtelte Funktion, die auf Variablen im Bereich der äußeren Funktion zugreifen kann. Zu ihren Vorteilen gehören Datenkapselung, Zustandserhaltung und Flexibilität. Zu den Nachteilen gehören der Speicherverbrauch, die Auswirkungen auf die Leistung und die Komplexität des Debuggens. Darüber hinaus können Abschlüsse anonyme Funktionen erstellen und diese als Rückrufe oder Argumente an andere Funktionen übergeben.

Titel: Durch Abschlüsse und Lösungen verursachte Speicherlecks Einführung: Abschlüsse sind ein sehr verbreitetes Konzept in JavaScript, das internen Funktionen den Zugriff auf Variablen externer Funktionen ermöglicht. Allerdings können Schließungen bei falscher Verwendung zu Speicherverlusten führen. In diesem Artikel wird das durch Schließungen verursachte Speicherverlustproblem untersucht und Lösungen sowie spezifische Codebeispiele bereitgestellt. 1. Durch Schließungen verursachte Speicherlecks Das Merkmal von Schließungen besteht darin, dass interne Funktionen auf Variablen externer Funktionen zugreifen können, was bedeutet, dass in Schließungen referenzierte Variablen nicht durch Müll gesammelt werden. Bei unsachgemäßer Verwendung

Die Auswirkungen von Funktionszeigern und -abschlüssen auf die Go-Leistung sind wie folgt: Funktionszeiger: Etwas langsamer als direkte Aufrufe, aber verbessert die Lesbarkeit und Wiederverwendbarkeit. Schließungen: Normalerweise langsamer, kapseln aber Daten und Verhalten. Praktischer Fall: Funktionszeiger können Sortieralgorithmen optimieren und Abschlüsse können Ereignishandler erstellen, aber sie bringen Leistungseinbußen mit sich.

Ja, die Einfachheit und Lesbarkeit des Codes können durch verkettete Aufrufe und Abschlüsse optimiert werden: Verkettete Aufrufe verknüpfen Funktionsaufrufe in einer fließenden Schnittstelle. Abschlüsse erstellen wiederverwendbare Codeblöcke und greifen auf Variablen außerhalb von Funktionen zu.

Funktionsabschlüsse der Go-Sprache spielen beim Unit-Testen eine wichtige Rolle: Werte erfassen: Abschlüsse können auf Variablen im äußeren Bereich zugreifen, sodass Testparameter erfasst und in verschachtelten Funktionen wiederverwendet werden können. Vereinfachen Sie den Testcode: Durch die Erfassung von Werten vereinfachen Abschlüsse den Testcode, indem sie die Notwendigkeit beseitigen, Parameter für jede Schleife wiederholt festzulegen. Verbessern Sie die Lesbarkeit: Verwenden Sie Abschlüsse, um die Testlogik zu organisieren und so den Testcode klarer und leichter lesbar zu machen.

Abschlüsse in Java ermöglichen es inneren Funktionen, auf äußere Bereichsvariablen zuzugreifen, selbst wenn die äußere Funktion beendet wurde. Durch anonyme innere Klassen implementiert, enthält die innere Klasse einen Verweis auf die äußere Klasse und hält die äußeren Variablen aktiv. Schließungen erhöhen die Codeflexibilität, Sie müssen sich jedoch des Risikos von Speicherverlusten bewusst sein, da Verweise auf externe Variablen durch anonyme innere Klassen diese Variablen am Leben halten.
