Verspricht eine Schließung?

8

In der Tag-Wiki-Seite zum Schließen heißt es "jQuery selbst ist ein großer Abschluss".

Aber ist Versprechung auch eine Schließung? Könnten Sie bitte erklären, warum oder warum nicht? So verstehe ich Schließung: Weisen Sie einer Variablen eine Funktion zu und verwenden Sie sie in verschiedenen Umgebungen wieder. Versprechen macht das mit $.ajax() , aber ich konnte nirgendwo im Stackoverflow finden, wo Versprechen als eine Schließung eingeführt wird. Vielleicht, weil es andere Versprechen gibt wie $.Deferred() , resolve() und fail() , um seine Funktionalität über eine einfache Funktion hinaus zu erweitern?

    
Forethinker 27.08.2013, 17:23
quelle

4 Antworten

9

Verschlüsse

  

So verstehe ich closure: Weisen Sie einer Variablen eine Funktion zu und verwenden Sie sie in verschiedenen Umgebungen wieder.

Das ist keine streng genaue Definition einer Schließung.

Eine Closure ist eine Funktion, die Zugriff auf eine Referenzierungsumgebung hat. In Javascript bedeutet das eine Funktion, die von einer anderen Funktion zurückgegeben wird und auf den ursprünglichen Funktionsumfang zugreifen kann. es gibt andere SO-Fragen, die das sehr gut beschreiben

Closures sind Allzweckstrukturen, die auf verschiedene Arten verwendet werden können. Einer ihrer größten Vorteile ist, dass sie den privaten Bereich schützen, weshalb Bibliotheken wie jQuery oft als Schließungen geschrieben werden, so dass sie nicht all ihre Funktionen global verfügbar machen müssen.

Versprechen

Versprechen sind ein anderes Konzept. Sie sind eine Möglichkeit, asynchronen Code zu strukturieren, um das Folgen des Flusses zu erleichtern. Ein Versprechen-Objekt ist insbesondere ein Objekt, das Funktionen bereitstellt, um Operationen klar und leicht zu lesen. Ein Versprechen könnte mit Verschlüssen umgesetzt werden, aber es muss nicht sein. Zum Beispiel ist hier eine Implementierung, die keine Closures verwendet:

Ссылка

Die jQuery-Implementierung verwendet mindestens einen Abschluss, basiert aber nicht wirklich auf ihnen

Ссылка

Fazit

Versprechen und Schließungen sind nicht direkt verwandte Konzepte. Closures sind eine Programmiertechnik, die in einer Promise-Implementierung verwendet werden kann. Am Ende ist es weder unmöglich noch notwendig, es so zu implementieren.

    
Ben McCormick 27.08.2013, 17:51
quelle
6

Du würdest nicht fragen, ob ein Vogelhaus ein 2x4 war, selbst wenn du eins benutzt hast, um es zu machen. Dasselbe gilt für Versprechungen und Schließungen. Versprechen nutzen Verschlüsse, um Verweise auf Status, Rückrufe und andere solche Dinge zu behalten.

    
zzzzBov 27.08.2013 17:51
quelle
5

Aufgrund der Natur von JavaScript, asynchron zu sein, bieten wir viel Power durch die Sprache und die Laufzeiten. Zunächst einmal, ein Promise in jQuery, obwohl es nicht eindeutig für jQuery ist, ist ein Objekt, das, wie es in der Dokumentation heißt, observe when all actions of a certain type bound to the collection, queued or not, have finished Das bedeutet, dass Sie dieses Objekt verwenden können, um zu wissen, wann Sie fortfahren müssen, nachdem ein Satz oder eine Reihe von Elementen ein bestimmtes Verhalten beendet hat. Nun ist ein Closure auf der anderen Seite nicht eindeutig für jQuery, sondern ein JavaScript-Konstrukt, das combines two things: a function, and the environment in which that function was created . Dies bedeutet, dass Sie nicht nur eine Funktion ausführen, sondern dies möglicherweise in einem völlig anderen Kontext tun.

    
ars265 27.08.2013 17:43
quelle
1

Closures und Promise sind unterschiedliche Konzepte. Closures bezieht sich auf den Gültigkeitsbereich von Variablen, bei denen Versprechen dazu dienen, zu versprechen, dass ein Vorgang bei einer asynchronen Aktion ausgeführt wird. Da Javascript nicht blockierend ist (nicht asynchron --edit), wartet es nicht darauf, dass eine Funktion eine Antwort erhält, wenn es auf das Internet oder die Festplatte zugreifen muss. Das heißt, Sie können versprechen, dass etwas ausgeführt wird, nachdem etwas getan wurde. p>     

Borrey 27.08.2013 17:45
quelle

Tags und Links