使用页面定时器是很常见的,我前面也探讨过。但是存在一个比较隐秘的问题,假如某次执行过程发生错误(即js执行报错),那么会不会影响下次的继续执行呢?
下面我们通过一个小例子来说明探索:
通过setInterval
<script>
$(function() {
//test();
setInterval('test()', 1000);
});
function test() {
var test = null;
console.log('aaaaaaaaa');
console.log(test.size);//模拟执行错误
};
</script>
打开浏览器控制台,你会发现:

虽然每次执行错误,但是它还是会去定时执行。
通过setTimeout回调本身:
$(function() {
test();
});
function test() {
var test = null;
console.log('aaaaaaaaa');
console.log(test.size);
setTimeout("test()", 1000);
};
你会发现控制台只执行了一次:

就不再执行了。
以上小例子是很有用的,项目中很可能因为你程序不够严谨的原因,偶然一次Js执行报错,假如你是通过setTimeout来实现定时器的话,很有可能这次偶然执行报错,会影响下一次的执行(卡在当前这一次)。所以最好使用setInterval来做定时器哦。
注意,定时器的第一个参数(js函数名必须加上括号哦,即使这个js函数不需要传参)
本文通过实例对比了setInterval与setTimeout在JS执行错误时的行为差异。发现setInterval即便执行过程中出现错误仍会继续定时执行,而setTimeout则可能因一次错误而停止后续执行。建议使用setInterval确保定时任务的稳定性。
42

被折叠的 条评论
为什么被折叠?



