передача функции вместе с аргументами в замыкание javascript

Пытаюсь сделать универсальное замыкание таймер, которое принимает period - таймера setInterval и две функции funStart, funEnd. А на выходе объект с двумя функциями: return { start, stop }

Для примера создал эти две функции funStart, funEnd.

Но не знаю как можно передать аргументы в передаваемые внутрь замыкания функции, например эту переменную let ws = 'websocket';

Собственно код :

let ws = 'websocket';
let funStart = () => {
  let timeNaw = new Date().getTime();
  console.log('This  funStart timeNaw =', timeNaw);
  console.log('ws=', ws);
};
let funEnd = () => {
  let timeNaw = new Date().getTime();
  console.log('This funEnd timeNaw=', timeNaw);
};
 
let timerConfigObj = { period: 5000, funStart: funStart, funEnd: funEnd };
 
let timerClosure = function (timerConfigObj) {
  let period = timerConfigObj.period;
  let funStart = timerConfigObj.funStart || function () { console.log('null function funStart') };
  let funEnd = timerConfigObj.funEnd || function () { console.log('null function funEnd') };
 
  let id;
  function start() {
    stop()
    id = setInterval(function () {
      funStart();
    }, period);
  }
 
  function stop() {
    clearInterval(id);
    funEnd();
  }
 
  return { start, stop }
};
 
let timerPingOne = timerClosure(timerConfigObj);
 
 
setTimeout(() => {
  console.log('Start  NewsetTimeout');
  timerPingOne.start();
}, 5000);
 
setTimeout(() => {
  console.log('Start  NewsetTimeout');
  timerPingOne.start();
}, 7000);
 
setTimeout(() => {
  console.log('Start  NewsetTimeout');
  timerPingOne.stop();
}, 30000);

Пробовал:

let funStart = (ws) => {
 
let timerConfigObj = { period: 5000, funStart: funStart(ws), funEnd: funEnd };
 
 return { start:start(ws), stop }

Единственное ближе всего получилось такое:

let funStart = (ws) => {
  let timeNaw = new Date().getTime();
  console.log('This  funStart timeNaw =', timeNaw);
  console.log('ws=', ws);
};

function start() {
    stop()
    id = setInterval(function () {
      funStart(ws);
    }, period);
  }

Но все равно это не то, что мне нужно. Необходимо передавать функции funStart, funEnd внутрь замыкания произвольные, с произвольным количеством аргументов без необходимости менять функцию замыкания.


Ответы (0 шт):