2010-01-15 4 views
16

Was sind Verschlüsse und Rückrufe in JavaScript? Ich habe noch keine gute Erklärung für beides gefunden.Was sind Closures und Callbacks?

+0

http://stackoverflow.com/questions/1095707/what-is-the-exact-definition-of-a-closure –

+6

Haben Sie dies in Google versucht: "JavaScript-Site schließen: stackoverflow.com" (Don ' t störe mit dem Suchfeld in SO selbst seinen Müll) Es gibt viele Orte, wo Schließungen beschrieben werden – AnthonyWJones

+0

http://StackOverflow.com/Questions/111102/how-does-a-javascript-closure-work – Upperstage

Antwort

34

Closures bereits in Stackoverflow ist hier nur eine Auswahl gut behandelt worden: -

How does a javascript closure work?
What exactly does “closure” refer to in JavaScript?
can you say this is a right example of Javascript Closure.. Where the places we need to consider avoiding the closures??
JavaScript scope and closure
Javascript Closures and ‘this’ context
JavaScript - How do I learn about “closures” usage?

Rückrufe sind ein einfacheres Konzept. Ein Callback ist grundsätzlich, wenn eine Funktion eine andere Funktion als Parameter akzeptiert. Irgendwann während der Ausführung führt die aufgerufene Funktion die als Parameter übergebene Funktion aus, dies ist ein Rückruf. Ziemlich oft tritt der Rückruf tatsächlich als ein asynchrones Ereignis auf, in welchem ​​Fall die aufgerufene Funktion zurückkehren kann, ohne den Rückruf ausgeführt zu haben, was später passieren kann. Hier ist ein gemeinsames (Browser-basierte) Beispiel: -

function fn() { alert("Hello, World"); } 
window.setTimeout(fn, 5000); 

Hier kann die Funktion fn als Rückruf an die setTimeout Funktion übergeben. Set Timeout kehrt sofort zurück, jedoch 5 Sekunden später wird die als Callback übergebene Funktion ausgeführt.

Verschlüsse und Rückrufe

Oft ist der Grund, die erhalten erstellte Schließungen (entweder übrigens zufällig oder absichtlich) ist die Notwendigkeit, einen Rückruf zu erstellen. Zum Beispiel: -

function AlertThisLater(message, timeout) 
{ 
    function fn() { alert(message); } 
    window.setTimeout(fn, timeout); 
} 

AlertThisLater("Hello, World!", 5000); 

(Bitte einige der verlinkten Beiträge lesen Schließungen zu erfassen)

Verschluss geschaffen wird, das teilweise die message Parameter wird fn einige Zeit nach dem Aufruf von AlertThisLater hat ausgeführt zurückgegeben, noch fn hat immer noch Zugriff auf den ursprünglichen Inhalt von message.

+0

Werden Callbacks am häufigsten mit setTimeout verwendet? –

+1

setTimeout ist eine häufige Verwendung, aber ebenso häufig wäre 'onreadystatechange' auf dem' XmlHttpRequest' -Objekt. In Code, der Javascript-Frameworks wie JQuery verwendet, werden Sie auch umfangreiche Callbacks verwenden. In vielen dieser Fälle ist der Callback genau dort, wo Sie ein wenig Logik bereitstellen würden, um einen großen, aber ansonsten standardmäßigen Prozess anzupassen. Auch Callbacks werden häufig verwendet, um dieselbe Funktion für eine Reihe von Objekten auszuführen. – AnthonyWJones