You can start by not adding vars to global scope:
var current_number = settings.startFrom;
This does fix the problem but the real issue is the timer that seems to ignore `clearTimeout`
console.log(timer + ‘: target = ‘ + settings.target.attr(‘id’) + ‘, number = ‘ + current_number);
If you log that you can see the timer keeps running, or at least it seems to.