2016-08-04 8 views
0

スクロールイベントは、私が働いているプロジェクトに発砲し、課税のものをデバウンスすることは実行可能な解決策になることを発見しますときに私はいくつかのパフォーマンスの問題に実行してきた:jQueryイベントオブジェクトは、イベントハンドラ内で匿名関数からアクセスできますか?

jQuery(document).ready(function() { 
    jQuery(window).on('scroll', debounce(function(e) { 
      console.log('debounced'); 
      console.log(e); // will print the corresponding jQuery object 
      // some heavy work 
     }, 250, true) 
    ); 
}); 

function debounce(func, wait, immediate) { 
    var timeout; 
    return function() { 
     var obj = this, args = arguments; 
     if (timeout) clearTimeout(timeout); 
     else if (immediate) func.apply(obj, args); 
     timeout = setTimeout(function() { 
      if (!immediate) func.apply(obj, args); 
      timeout = null; 
     }, wait || 100); 
    }; 
}; 

私の質問はどのように、ありますjQueryイベントオブジェクトはdebounce()内で正しく渡されていますか? これは、ハンドラとして設定された関数の最初の引数として渡されるはずです、ここではdebounce()ですか?

この解決策はうまくいっているようですが、ここでは欠落している概念がありますか?

NB:デバウンス機能についてJohn Hannにクレジット

+0

は 'debounceOnce() 'は? – technophobia

+0

編集して申し訳ありません、 'debounce()'を参照していました。最初は、デバウンスが複数回処理されたという事実のために意味されていました。実際に私が望んでいたものではありませんでした。別のソリューションを試してみました。デバウンスをデバウンスに変更しました。そして、最終的には、ハンドラ。 – decksterr

+0

jQueryイベントオブジェクトはargumentsオブジェクトから取得されます。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments – Will

答えて

1

回答はjQueryのイベントは、それがexacly何のイベントがパラメータで取得したいので、それは無名関数を持っている見返りにデバウンス機能のリターンを、取得することです。

var exampleFunc=function(){ 
    return 1; 
}; 

var a = exampleFunc; //a is exampleFunc reference 
a= exampleFunc(); // a is return value of exampleFunc = 1 

いくつかの例と同じ動作:

$('el').on("click",function(e){ /* do something */ }) 

someFunc=function(){ /* do something */ }; 
$('el').on("click",someFunc); 

と同じであり、同じである:

someFunc=function(){ /* do something */ }; 
someFunc2=function(){ /* do something 2 */ return someFunc; }; 

$('el').on("click",someFunc2()); 

と...同じ:

someFunc2=function(){ 
    /* do something 2 */ 
    return function(){ /* do something */ } 
}; 

$('el').on("click",someFunc2()); 

結論 - 次の関数の関数を使用すると、戻り値が使用されます。

var a=5; 
var getA(){ return 5; }; 

var twentyfive=a*getA(); //25 

は別の関数としての機能のリターンを使用いくつかの例:

//EXAMPLE NESTED FUNCTION 
 
var funcNested=function(){ 
 
    console.log("It is funcNested "); 
 
}; 
 

 
var func=function(){ return funcNested; }; 
 

 
$("#test").on("click",func());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button id="test">Click me</button>

+0

ありがとうございました! 私はそれを理解しましたが、何とかこの事にどのように当てはまるかを関連させるのに苦労しました – decksterr

関連する問題