function defer(func) {
      if (!isFunction(func)) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var args = arguments;
      return setTimeout(function() { func.apply(undefined, slice(args, 1)); }, 1);
    }
Defers invoking the `func` until the current call stack has cleared. Any
additional arguments are provided to `func` when it is invoked.

@static
@memberOf _
@category Function
@param {Function} func The function to defer.
@param {...*} [args] The arguments to invoke the function with.
@returns {number} Returns the timer id.
@example

_.defer(function(text) { console.log(text); }, 'deferred');
// logs 'deferred' after one or more milliseconds