2014-10-13 2 views
4

Предположим, что у меня есть этот обработчик событий:Подчеркивание дребезга с аргументами

var mousewheel = function (e) { /* blah */ }; 

Но я хочу дребезга его. Так что я делаю это, который работает, как ожидалось:

var mousewheelDebounced = _.debounce(mousewheel, 500); 
$(document).on("mousewheel", function (e) { 
    e.preventDefault(); 
    mousewheelDebounced(e); 
} 

Но это не работает, как ожидалось:

$(document).on("mousewheel", function (e) { 
    e.preventDefault(); 
    _.debounce(mousewheel, 500)(e); 
} 

Я предпочитаю компактностью второй формы. Но не происходит дедушение.

Я полагаю, что никакая ссылка на mousewheelDebounced не осталась, поэтому базовый обработчик вызывается каждый раз. Это причина? Как я могу очистить этот код, если это возможно?

Вы можете увидеть fiddle here.

ответ

5

При каждом событии mousewheel (что происходит очень часто) вы создаете новую версию функции debounce. Эта функция не имеет истории и не знает, что на предыдущем событии была создана другая. Так оно и работает. Вот почему вы должны пойти с первой версией.

+0

Этот код выполняется каждый раз, при этом не происходит отладки. –

+0

Он должен работать http://jsfiddle.net/jmocdzcu/ – dfsq

+1

Не работает для меня. Моя скрипка работает, хотя: http://jsfiddle.net/hygo4oo6/. Ваш исходный комментарий верен, я думаю, что там должна быть ссылка где-то на дебютирующую функцию. –

Смежные вопросы