如何在此处解决回调?

时间:2014-09-12 23:35:02

标签: javascript jquery

简单的问题,

如何将其称为简单基本功能而不是window.resize事件?

$( window ).resize( debouncer( function ( e ) {
    // do stuff 
    $('body').append('<p>done</p>');
} ) );

在窗口调整大小时,我追加一个<p>元素 - 然而,下面的debouncer函数似乎首先被调用去抖动窗口大小调整。

问题比这简单得多,如何将debouncer称为函数而不是在window.resize上调用它?这与回调有关吗?

E.g我想在我的代码中调用一个函数而不是在窗口调整大小。

我想我可以删除$( window ).resize并将其替换为函数,例如var greet = function,然后调用greet()无效。

这看起来非常基本,但我不知道如何在debouncer之间调用函数,如何调用它以及如何调用去抖代码。


在window.resize上调用的debouncer函数

应该是无关紧要的,但无论如何我都包含它):

function debouncer( func , timeout ) {
   var timeoutID , slice = Array.prototype.slice , timeout = timeout || 200;
   return function () {
      var scope = this , args = arguments;
      clearTimeout( timeoutID );
      timeoutID = setTimeout( function () {
          func.apply( scope , slice.call( args ) );
      } , timeout );
   }
}

1 个答案:

答案 0 :(得分:1)

你的debouncer函数返回功能。我认为你想要实现的是从代码中调用该函数。如果是这种情况,您可以执行以下操作:

var timeout = 100;
function debouncer_func( e ) {
    // do stuff 
    $('body').append('<p>done</p>');
}
debouncer(debouncer_func, timeout)();

你也可以这样做:

debouncer(function(e){
  // do stuff 
  $('body').append('<p>done</p>');
}, 100)();

基本上你的debouncer函数正在返回一个函数。因此debouncer(args)()会从debouncer调用您返回的函数。