Используете более осмысленные названия переменных, не стал разбираться, что у вас в коде происходит.
Пример управляемого интервала:
<div><input type="number" readonly value="0"/></div>
<button type="button" data-action="pause">Pause</button>
<button type="button" data-action="resume">Resume</button>
<button type="button" data-action="destroy">Destroy</button>
<script>
var controlledInterval = function (callback, delay) {
var args = [].slice.call(arguments, 2);
var stepsPerLoop = 50,
loopDelay = delay / stepsPerLoop,
counter = 0,
pause = false,
timeout;
timeout = setTimeout(function tik() {
if (!pause) {
counter += loopDelay;
}
if (counter >= delay) {
callback.apply(window, args);
counter = 0;
}
timeout = setTimeout(tik, loopDelay);
}, loopDelay);
return {
pause: function () {
pause = true;
},
resume: function () {
pause = false;
},
destroy: function () {
clearTimeout(timeout);
}
};
};
var input = document.querySelector('input'),
interval = controlledInterval(function () {
input.value = +input.value + 1;
}, 1000);
document.querySelectorAll('[data-action]').forEach(function (node) {
node.addEventListener('click', function () {
interval[this.dataset.action]();
});
});
</script>