Es ist einfacher als die Demos.
Wenn throttle aufgerufen wird, wird Ihre Funktion regelmäßig ausgeführt (z.B. alle 20 ms) - und am Ende einmal.
Debounce wird nur am Ende ausgeführt (z.B. 20 ms nach dem letzten Ereignis).
Solange Ereignisse weiterhin schnell auftreten (z.B. in Intervallen von weniger als 20 ms), wird debounce schweigen, während throttle alle 20 ms einmal ausführen wird. Beide werden am Ende ausgeführt, der Unterschied besteht nur darin, dass throttle auch zwischendurch in festgelegten Intervallen ausgeführt wird.
Beispiel: Wenn Sie scrollen, wird throttle langsam Ihre Funktion aufrufen, während Sie scrollen (alle X Millisekunden). Debounce wird warten, bis Sie mit dem Scrollen fertig sind, um Ihre Funktion aufzurufen (möglicherweise nur einmal).
Ich denke gerne an throttle als "einschließlich debounce", beide rufen am Ende die Funktionen auf, wenn die Ereignisse abgeschlossen sind, aber aufgrund von Implementierungsdetails rufen die beiden nicht immer genau zum gleichen Zeitpunkt auf, was Demos verwirrend macht.