code: function(fn, ms) {
      function debounced() {
        // Optimized: no leaking arguments
        var args = []; for(var $i = 0, $len = arguments.length; $i < $len; $i++) args.push(arguments[$i]);
        cancelFunction(debounced);
        setDelay(debounced, ms, fn, this, args);
      }
      return debounced;
    }
docs: *
  @method debounce([ms] = 1)
  @returns Function
  @short Creates a "debounced" function that postpones its execution until
  after `ms` milliseconds have passed.
  @extra This method is useful to execute a function after things have
  "settled down". A good example of this is when a user tabs quickly
  through form fields, execution of a heavy operation should happen
  after a few milliseconds when they have "settled" on a field.
  
  @example
  
  var fn = logHello.debounce(250)
  runTenTimes(fn); -> called once 250ms later
  
  @param {number} [ms]
  
  *