code: function(fn, num) {
      var count = 0, collectedArgs = [];
      num = coercePositiveInteger(num);
      return function() {
        // Optimized: no leaking arguments
        var args = []; for(var $i = 0, $len = arguments.length; $i < $len; $i++) args.push(arguments[$i]);
        collectedArgs.push(args);
        count++;
        if (count >= num) {
          return fn.call(this, collectedArgs);
        }
      };
    }
docs: *
  @method after(n)
  @returns Function
  @short Creates a function that will execute after `n` calls.
  @extra `after` is useful for running a final callback after a specific
  number of operations, often when the order in which the operations
  will complete is unknown. The created function will be passed an
  array of the arguments that it has collected from each after `n`.
  Note that the function will execute on every call after `n`.
  Use `once` in conjunction with this method to prevent being
  triggered by subsequent calls.
  
  @example
  
  var fn = logHello.after(5);
  runTenTimes(fn); -> logs 6 times
  
  var fn = logHello.once().after(5)
  runTenTimes(fn); -> logs once
  
  @param {number} [n]
  
  *