1var toInteger = require('./toInteger'); 2 3/** Error message constants. */ 4var FUNC_ERROR_TEXT = 'Expected a function'; 5 6/** 7 * Creates a function that invokes `func`, with the `this` binding and arguments 8 * of the created function, while it's called less than `n` times. Subsequent 9 * calls to the created function return the result of the last `func` invocation. 10 * 11 * @static 12 * @memberOf _ 13 * @since 3.0.0 14 * @category Function 15 * @param {number} n The number of calls at which `func` is no longer invoked. 16 * @param {Function} func The function to restrict. 17 * @returns {Function} Returns the new restricted function. 18 * @example 19 * 20 * jQuery(element).on('click', _.before(5, addContactToList)); 21 * // => Allows adding up to 4 contacts to the list. 22 */ 23function before(n, func) { 24 var result; 25 if (typeof func != 'function') { 26 throw new TypeError(FUNC_ERROR_TEXT); 27 } 28 n = toInteger(n); 29 return function() { 30 if (--n > 0) { 31 result = func.apply(this, arguments); 32 } 33 if (n <= 1) { 34 func = undefined; 35 } 36 return result; 37 }; 38} 39 40module.exports = before; 41