code: function(loopable, fn, thisArg, reverse) {
  		var i, len, keys;
  		if (helpers.isArray(loopable)) {
  			len = loopable.length;
  			if (reverse) {
  				for (i = len - 1; i >= 0; i--) {
  					fn.call(thisArg, loopable[i], i);
  				}
  			} else {
  				for (i = 0; i < len; i++) {
  					fn.call(thisArg, loopable[i], i);
  				}
  			}
  		} else if (helpers.isObject(loopable)) {
  			keys = Object.keys(loopable);
  			len = keys.length;
  			for (i = 0; i < len; i++) {
  				fn.call(thisArg, loopable[keys[i]], keys[i]);
  			}
  		}
  	}
docs: Note(SB) for performance sake, this method should only be used when loopable type
  is unknown or in none intensive code (not called often and small loopable). Else
  it's preferable to use a regular for() loop and save extra function calls.
  @param {object|Array} loopable - The object or array to be iterated.
  @param {function} fn - The function to call for each item.
  @param {object} [thisArg] - The value of `this` provided for the call to `fn`.
  @param {boolean} [reverse] - If true, iterates backward on the loopable.