передача функции вместе с аргументами в замыкание 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 внутрь замыкания произвольные, с произвольным количеством аргументов без необходимости менять функцию замыкания.