 
 reduceRight = createReduce(-1)
 
+# 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.
+# If immediate is passed, trigger the function on the leading edge,
+# instead of the trailing.
 debounce = (func, wait, immediate) ->
   timeout = undefined
   args = undefined

      keys.push key
  keys

getValues = (obj) ->
  keys = getKeys obj
  length = keys.length

  ->
    func.apply context, arguments


# Create a reducing function iterating left or right.
# Optimized iterator function as using arguments.length in the main function
# will deoptimize the, see #1991.
createReduce = (dir) ->
  iterator = (obj, iteratee, memo, keys, index, length) ->
    while index >= 0 and index < length
