clearInterval不工作,Interval Undefined

时间:2014-07-28 19:40:34

标签: javascript settimeout setinterval clearinterval

好的,所以我已经阅读了其他20个问题,这里和网上其他地方有关类似的问题,但最终都是因为他们不喜欢,正确设置变量并假设clearInterval基于函数ID或某些此类事物。 这就是我所拥有的(还有更多,但它相当冗长,我明白这是重要的一点):

var fan1 = function () {
    var f1 = setInterval("flare1baserotate()",10);
    setTimeout("clearInterval(f1)",2000);
};

基本上," fan1()"函数被正确调用,setInterval正常运行,因为" flare1baserotate()"函数正常运行并每10毫秒旋转一次我的对象,但问题出现在" clearInterval(f1)"我认为应该在20秒后没有正常运行。 我需要做些什么才能在20秒后清除它?

2 个答案:

答案 0 :(得分:1)

改为使用:

var f1 = setInterval(function() {flare1baserotate();},10);
setTimeout(function() {clearInterval(f1); },2000);

答案 1 :(得分:1)

如果您使用带有setTimeoutsetInterval的字符串,则其中的代码将在全局window范围内运行,而不是在其调用的范围内运行。因此,在f1函数中声明的fan1无法在全局clearInterval(f1)范围内执行的行window中获得。一个简单的解决方案是使f1全局化。

var f1;
var flare1baserotate = function(){console.log("hi");};
var fan1 = function () {
    f1 = setInterval("flare1baserotate()",10);
    setTimeout("clearInterval(f1)",2000);
};

建议的做法是使用闭包而不是将代码行作为字符串传递。

没有全局变量的困难方式可能看起来像

var flare1baserotate = function() {
    console.log("hi");
};
var fan1 = function() {
    var f1 = setInterval("flare1baserotate()", 10);
    setTimeout((function(f1) {
        return function() {
            clearInterval(f1);
        }
    })(f1), 2000);
};