Javascript setTimeout之后的setInterval将持续执行

Javascript setTimeout之后的setInterval将持续执行,javascript,settimeout,setinterval,Javascript,Settimeout,Setinterval,我得到了检查某个元素右上角当前位置的代码: function checkContentPos(e) { var positionLeft = 0, checkTabPos = null, pos; e = $(e).filter('li'); alert($(e).attr('class')); //alert($(e).attr('class')); checkTabPos = setInterval( function

我得到了检查某个元素右上角当前位置的代码:

function checkContentPos(e) {
    var positionLeft = 0,
    checkTabPos = null,
    pos;

    e = $(e).filter('li');
    alert($(e).attr('class'));
    //alert($(e).attr('class'));
    checkTabPos = setInterval(
        function () {
            ii++;
            debug(ii);
            pos = $(e).offset(); 
            pos['left'] += parseInt($(e).css('width'));
            positionLeft = pos.left;
            debug(positionLeft);
        }, 40);
    function stopCheckTabPos() {
        debug('stopCheckTabPos invoked')
        clearInterval('checkTabPos');
    }
    setTimeout(stopCheckTabPos, 400);
    return(positionLeft);
    };
但我觉得它好像是在瞬间循环的。在setTimeout之后,它仍然不断地被调用

 clearInterval('checkTabPos');
这里不要使用引号。那怎么行呢?您需要传入由
setInterval
返回的标识符,而不是一些任意字符串。

当您应该将其与变量一起使用时,您使用的是字符串
'checkTabPos'

function stopCheckTabPos() {
    debug('stopCheckTabPos invoked')
    clearInterval(checkTabPos);
}

这太容易了。。。我花了一个小时的时间。谢谢嗯,也许有人能告诉我为什么不能访问positionLeft变量?在执行setInterval后,它仍然为零,但当它在函数中时,该值是正确的。
checkContentPos
末尾的
返回发生在执行之前,而不是之后,因此
positionLeft
0
<代码>设置间隔
设置超时
不阻止执行。清除间隔后,您需要由
stopCheckTabPos
调用一些回调函数。