const setIntervalBySetTimeout = function (func, delay, ...args) { const timer = setTimeout(() => { func.apply(null, args) clearTimeout(timer) setIntervalBySetTimeout(func, delay, ...args) }, delay) } const counter = (count) => { return function (add) { console.log(count++ + add) } } setIntervalBySetTimeout(counter(1), 1000, 100)