time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

before.js (1090B)


      1 var toInteger = require('./toInteger');
      2 
      3 /** Error message constants. */
      4 var 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  */
     23 function 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 
     40 module.exports = before;