lodash debounce funktioniert nicht in anonymer Funktion

Hallo, ich kann nicht herausfinden, warum die Entprellungsfunktion wie erwartet funktioniert, wenn sie direkt an ein Keyup-Ereignis übergeben wird. aber es funktioniert nicht, wenn ich es in eine anonyme Funktion einbinde.

Ich habe Geige des Problems:http://jsfiddle.net/6hg95/1/

EDIT: Hinzugefügt alle Dinge, die ich versucht habe.

HTML

<input id='anonFunction'/>
<input id='noReturnAnonFunction'/>
<input id='exeDebouncedFunc'/>
<input id='function'/>
<div id='output'></div>

JAVASCRIPT

$(document).ready(function(){
    $('#anonFunction').on('keyup', function () {
        return _.debounce(debounceIt, 500, false); //Why does this differ from #function
    });
    $('#noReturnAnonFunction').on('keyup', function () {
        _.debounce(debounceIt, 500, false); //Not being executed
    });
    $('#exeDebouncedFunc').on('keyup', function () {
        _.debounce(debounceIt, 500, false)(); //Executing the debounced function results in wrong behaviour
    });
    $('#function').on('keyup', _.debounce(debounceIt, 500, false)); //This is working.
});

function debounceIt(){
    $('#output').append('debounced');
}

anonFunction undnoReturnAnonFunction löst die Entprellfunktion nicht aus; aber das letztefunction feuert. Ich verstehe nicht, warum das so ist. Kann mir bitte jemand helfen, das zu verstehen?

BEARBEITEN Okay, der Grund dafür, dass das Entprellen in #exeDebouncedFunc (demjenigen, auf den Sie verweisen) nicht auftritt, ist, dass die Funktion im Bereich der anonymen Funktion ausgeführt wird und ein anderes Keyup-Ereignis eine neue Funktion in einem anderen anonymen Bereich erstellt. Dadurch wird die entprellte Funktion so oft ausgelöst, wie Sie etwas eingeben (anstatt einmal auszulösen, was das erwartete Verhalten wäre; siehe unten)#func,tion)?

Können Sie bitte den Unterschied erklären zwischen#anonFunction und das#function. Ist dies wieder eine Frage des Scoping, warum einer von ihnen funktioniert und der andere nicht?

BEARBEITEN Ok, jetzt verstehe ich, warum das passiert. Und hier ist, warum ich es in eine anonyme Funktion einschließen musste:

Geige:http://jsfiddle.net/6hg95/5/

HTML

<input id='anonFunction'/>
<div id='output'></div>

JAVASCRIPT

(function(){
    var debounce = _.debounce(fireServerEvent, 500, false);

    $('#anonFunction').on('keyup', function () {
        //clear textfield
        $('#output').append('clearNotifications<br/>');
        debounce();
    });

    function fireServerEvent(){
        $('#output').append('serverEvent<br/>');
    }
})();

Antworten auf die Frage(5)

Ihre Antwort auf die Frage