好的,所以我已经阅读了其他20个问题,这里和网上其他地方有关类似的问题,但最终都是因为他们不喜欢,正确设置变量并假设clearInterval基于函数ID或某些此类事物。 这就是我所拥有的(还有更多,但它相当冗长,我明白这是重要的一点):
var fan1 = function () {
var f1 = setInterval("flare1baserotate()",10);
setTimeout("clearInterval(f1)",2000);
};
基本上," fan1()"函数被正确调用,setInterval正常运行,因为" flare1baserotate()"函数正常运行并每10毫秒旋转一次我的对象,但问题出现在" clearInterval(f1)"我认为应该在20秒后没有正常运行。 我需要做些什么才能在20秒后清除它?
答案 0 :(得分:1)
改为使用:
var f1 = setInterval(function() {flare1baserotate();},10);
setTimeout(function() {clearInterval(f1); },2000);
答案 1 :(得分:1)
如果您使用带有setTimeout
或setInterval
的字符串,则其中的代码将在全局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);
};