title: Can someone explain the "debounce" function in Javascript
body: <p>I am interested in the "debouncing" function in javascript, written here : <a href="http://davidwalsh.name/javascript-debounce-function">http://davidwalsh.name/javascript-debounce-function</a></p>
  
  <p>Unfortunately the code is not explained clearly enough for me to understand.  Can anyone help me figure out how it works (I left my comments below). In short I just really do not understand how this works</p>
  
  <pre><code>   // Returns a function, that, as long as it continues to be invoked, will not
     // be triggered. The function will be called after it stops being called for
     // N milliseconds.
  
  
  function debounce(func, wait, immediate) {
      var timeout;
      return function() {
          var context = this, args = arguments;
          var later = function() {
              timeout = null;
              if (!immediate) func.apply(context, args);
          };
          var callNow = immediate &amp;&amp; !timeout;
          clearTimeout(timeout);
          timeout = setTimeout(later, wait);
          if (callNow) func.apply(context, args);
      };
  };
  </code></pre>
  
  <p>EDIT: The copied code snippet previously had <code>callNow</code> in the wrong spot.</p>