docs: function(fnc, cacheId, delay, scope, parameters, strategy) {
              var self = this,
                  LOOP = "loop";
  
              if (!fnc) {
                  return;
              }
  
              cacheId = cacheId || fnc.toString();
              scope = scope || this;
              parameters = parameters || [];
              strategy = strategy || LOOP;
  
              if (delay === 0) {
                  // immediately invoke function
                  fnc.apply(scope, parameters);
                  return;
              }
  
              delay = delay || 300;
              if (this.$debounceTimeoutMap[cacheId]) {
                  // timer registered
  
                  if (strategy === LOOP) {
                      return;
                  }
  
                  clearTimeout(this.$debounceTimeoutMap[cacheId]);
              }
  
              this.$debounceTimeoutMap[cacheId] = setTimeout(function() {
                  delete self.$debounceTimeoutMap[cacheId];
                  fnc.apply(scope, parameters);
              }, delay);
          }