2016-10-01 6 views
1

Warum hat die folgende anonyme JS-Funktion "e" als Parameter? Ich verstehe, dass es das Ereignis ist, aber wie wurde es gespeichert? Dieses "e" wird nirgendwo erwähnt, außer in diesem Event-Listener und im Handler, den es verwendet.Anonyme Funktion des Ereignishörers

+0

'e' ist ein Parameter, der durch die CLIP-Funktion ist vergangen ist, wenn das Ereignis ausgelöst wird. Versuchen Sie zu denken, dass irgendwo ein Ort ist, an dem alle Funktionen des 'keyup' -Ereignisses im' body'-Element hängen. Wenn diese Ereignisse ausgelöst werden, führt diese Funktion so etwas wie "callback (eventFired)" aus. –

+0

Ok, es gibt so etwas wie eine Standard-oder Universal-Bibliothek bei der Arbeit hier und die Funktion namens "statt", dass Anonymous dieses Argument braucht, habe ich es richtig? –

+0

Es ist der Browser, auf dem der Code ausgeführt wird, der dafür verantwortlich ist. Es ist nicht so, in diesem Fall "braucht es" dieses eine Argument. Es liegt an dir, es zu benutzen oder nicht. Der Aufrufer fügt der Callback-Funktion (in diesem Fall dem Ereignis "event") ein beliebiges Argument hinzu, das Sie verwenden können, indem Sie einen Parameter in die von Ihnen bereitgestellte Funktion einfügen. –

Antwort

0

Denken Sie daran, dass diese anonyme Funktion den Moment aufgerufen wird, in dem ein keyup Ereignis auftritt. Die anonyme Funktion sagt: "Hey, wenn du mich anrufst, solltest du mir einen Streit liefern." Wenn also das Ereignis keyup eintritt, ruft der Browser diese anonyme Funktion mit einem Argument auf, das das Ereignisobjekt sein wird. Das Ereignisobjekt wird in dem Moment erstellt, in dem das Ereignis eintritt.

+1

Das Vorhandensein eines benannten Parameters ändert das Verhalten des Browsers nicht. Das Ereignisobjekt wird immer an den Handler übergeben. – Andreas

+0

Danke für diese Klarstellung. Ich bin mir dessen bewusst, aber ich wollte das technische Rauschen aus meiner Antwort herauslassen, um mich auf das zu konzentrieren, was der Fragesteller gefragt hat. – kevin628

+0

Nun, danke euch beiden, das macht mir die Dinge sehr klar, also bedeutet das, dass es nicht "e" sein muss, ich kann jeden Platzhalter verwenden, den ich mag, oder? –

0

Die Methode addAventListener nimmt eine Funktion als Eingabe und ruft diese Funktion dann bei jedem Ereignis mit einem event-object auf.

Ein einfaches Beispiel zur Veranschaulichung wurde hinzugefügt.

function EventCreator() { 
 
    var listeners = []; 
 
    var counter = 0; 
 
    setInterval(function() { 
 
    counter++; 
 
    listeners.forEach(function(listener) { 
 
     listener(counter); 
 
    }); 
 
    }, 1000); 
 

 
    this.addListener = function(listener) { 
 
    listeners.push(listener); 
 
    }; 
 
} 
 

 
var eventCreator = new EventCreator(); 
 

 
eventCreator.addListener(function(e) { 
 
    console.log("An event has occured: ", e); 
 
});

Docs: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

+0

Danke, dude, aber nur eine Frage, warum ist nicht die Addlistener Funktion innerhalb der eingestellten Intervallfunktion? Muss es nicht jedes Mal laufen, wenn es läuft? –

+0

Die Add-Listener-Funktion hängt nur einen Listener an eine Liste an. Und wenn ein Ereignis eintritt, gehen Sie durch die Liste der Listener und rufen sie nacheinander mit dem neuen Ereignis auf (in diesem Beispiel ist es ein Zähler). Die Funktion, die als addListener-Parameter gesendet wird, wird nicht sofort aufgerufen, sondern in der Liste gespeichert, bis das Ereignis eintritt und dann aufgerufen wird. – knutesten

+0

okaaaaaay vielen Dank! –