Follow-up question to explanation of a JavaScript debounce function Why do the examples of how to call the debounce function supply only two arguments? (The debounce function has three parameters.)
            Asked
            
        
        
            Active
            
        
            Viewed 590 times
        
    1
            
            
        - 
                    4This should probably have been a comment on an answer in the linked thread. Rather than a new question. – Turnip May 24 '17 at 14:48
- 
                    it says it in the source linked in that question - *If `immediate` is passed, trigger the function on the leading edge, instead of the trailing* .. so, I guess if you supply on ly two, then the function is triggered on trailing edge – Jaromanda X May 24 '17 at 14:49
- 
                    No,it must be a new question -- since Stack Overflow does not allow me to post any comment ... ;-) – Goran W May 24 '17 at 14:57
- 
                    @Jaromanda, so what you are effectively saying is that you can skip supplying arguments in JavaScript? If so, then what value does the corresponding parameter have within the called function? – Goran W May 24 '17 at 15:03
- 
                    Duplicate? https://stackoverflow.com/questions/11107823/what-happens-if-i-dont-pass-a-parameter-in-a-javascript-function – Quentin May 24 '17 at 15:05
- 
                    (@JaromandaX OP mis-tagged you in a comment response) – evolutionxbox May 24 '17 at 15:07
- 
                    1@GoranW you can pass "null" or "false", or leave the last parameters of a function out. `function x(one, two, three)` excecuted as follows: `x("abc", "def")`. Inside the function: `"one = "abc", two = "def", three = undefined`. In this case you can check for "null/undefined". JavaScript declares "null", "undefined" and "false" as "false" and will choose the else-path. – DomeTune May 24 '17 at 15:08
- 
                    @GoranW have you looked at [this variant](http://benalman.com/code/projects/jquery-throttle-debounce/docs/files/jquery-ba-throttle-debounce-js.html)? – evolutionxbox May 24 '17 at 15:09
2 Answers
0
            
            
        I made a little example for you. I hope you understand how and why it works as descripted in the given post.
function debounce(func, wait, immediate){
  var timeout; //create timeout for the given "func"tion
  return function() {
      var context = this, args = arguments;
      var later = function() {
          timeout = null; //clear/reset the timeout
          if (!immediate) func.apply(context, args); //call function if immediate is "false" or "null/undefined"
      };
      var callNow = immediate && !timeout; //full if statement below
      //if((immediate != null || immediate == true) && (timeout == null || timeout == false)) 
      //callNow = true;
      clearTimeout(timeout); //clear the last timeout
      timeout = setTimeout(later, wait); //call function "later" after "wait"-time 
      if (callNow) func.apply(context, args); //call function immediately (if-statement above)
  };
};
var timeout;
function example(variable, wait, now){
  var callNow = now && !timeout;
  if(callNow) {
    console.log(variable);
  } else {
    var logVar = function(){ 
      timeout = null;
      console.log(variable); 
    };
    timeout = setTimeout(logVar, wait);
  }
};
example("Hello World immediate", 2000, true); //immediate
example("Hello World after two seconds!", 2000); //after "wait"-time
example("Hello World immediate", 2000, true); //after "wait"-time, because there is a timeout allreadyYou can see this in more detail here, its allready in one of the answers below the given post.
 
    
    
        DomeTune
        
- 1,401
- 10
- 21
0
            
            
        A basic debounce can be implemented like below
var buttonEl = document.querySelector("button");
var countryEl = document.querySelector("#counter");
var counter = 0;
buttonEl.addEventListener("click", debounce(onClick, 1000));
function debounce(cb, delay){
 var lastCallTime = new Date().getTime();
  return function(){
   if( (new Date().getTime() - lastCallTime) > delay){
     lastCallTime = new Date().getTime();
    cb.call(this, arguments);
    }
  }
}
function onClick(event){
 //console.log(this, event);
  countryEl.innerHTML = counter++;
}<button>
Click Me!!
</button>
<div id="counter">
  
</div> 
    
    
        Ashvin777
        
- 1,446
- 13
- 19
