使用动态参数在setInterval函数内禁用计时器

我想将动态参数传递给setInterval函数(请参阅此处的问题),特别是@tvanfosson的注释。 但现在,如果满足某个条件,我也想禁用该计时器。 我试图将timer变量定义为全局变量,但我仍然将此计时器undefinedundefined
console.log('else. timer=' + timer);

其他。 计时器=未定义

  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; } } }  

我试图创建一个JSFiddle,但我不能让它正常工作: https ://jsfiddle.net/puhw3z2k/

有几个问题:

1)您必须从createInterval()函数返回timerID:

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

2) clearInterval()工作方式类似于clearInterval(timer) ,而不是timer.clearInterval()