Отключить таймер в функции setInterval с динамическими параметрами

Я хотел передать динамические параметры в функцию setInterval (см. вопрос здесь) и особенно комментарий @tvanfosson. Но теперь я также хочу отключить этот таймер, если выполняется определенное условие. Я попытался определить переменную таймера как глобальную переменную, но я все равно получаю таймер как undefined в этой строке:
 console.log('else. timer=' + timer);:

еще. Таймер = undefined

<script language="javascript" type="text/javascript">
    var timer;
    var params={};
    params.color='light';
    $(document).ready(function () {            
        timer=createInterval(showSmallWidget, params.color, 500);
    });

    function createInterval(f, dynamicParameter, interval) {
        setInterval(function () {
            f(dynamicParameter);
        }, interval);
    }

    function showSmallWidget(color) {
        if ($('#widget').html() == '') {
            //do stuff
        }
        else {
            console.log('else. timer=' + timer);
            if (timer) { console.log('CLEAR TIMER'); timer.clearInterval(); timer = null; }
        }
    }
</script>

Я попытался создать JSFiddle, но я не могу заставить его работать правильно: https://jsfiddle.net/puhw3z2k/

Ответ 1

Есть несколько проблем:

1) Вы должны вернуть timerID из своей функции createInterval():

function createInterval(f, dynamicParameter, interval) {
    return setInterval(function () {
        f(dynamicParameter);
    }, interval);
}

2) clearInterval() работает как clearInterval(timer), а не timer.clearInterval().