Sampling function in JavaScript

Create a function in JavaScript that accepts a function as input and a count and executes that input function once for a given count of calls. Known as sampling function.

Example

function message(){
  console.log("hello");
}

const sample = sampler(message, 4);
sample();
sample();
sample();
sample(); // this will be executed
sample();
sample();
sample();
sample(); // this will be executed

The sampling function is different than throttling as throttling limits the execution of the function once in a given amount of time while sampling limits the execution by executing function once in a given number of calls.

To create a sampling function we can create a closure that will track how many times the function has been called and once it reaches the count, execute the input function and reset the counter.

function sampler(fn, count, context){
    let counter = 0;

    return function(...args){
        // set the counters
        let lastArgs = args;
        context = this ?? context;
        
        // invoke only when number of calls is equal to the counts
        if(++counter !== count) return;
        
        fn.apply(context, args);
        counter = 0;
    };
}
function message(){
  console.log("hello");
}

const sample = sampler(message, 4);
sample();
sample();
sample();
sample(); // hello
sample();
sample();
sample();
sample(); // hello