Pix*_*ode 6 javascript recursion settimeout
我按照 W3Schools 的本教程创建了一个图像幻灯片:https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_slideshow_auto
它使用递归函数setTimeout()来自动滑动图像。这对用户的浏览器性能有害吗?或者我可以放心使用它吗?
var slideIndex = 0;
showSlides();
function showSlides() {
var i;
var slides = document.getElementsByClassName("mySlides");
var dots = document.getElementsByClassName("dot");
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex++;
if (slideIndex > slides.length) {
slideIndex = 1
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndex - 1].style.display = "block";
dots[slideIndex - 1].className += " active";
setTimeout(showSlides, 2000); // Change image every 2 seconds
}
Run Code Online (Sandbox Code Playgroud)
如果通过递归,你的意思是 asetTimeout最终调用另一个(或更常见的是它本身),那么不是。
事实上,这是首选的方法。
通过使用setTimeout它,浏览器可以在更新之间休息以进行其他更新(也称为“非阻塞”)。
您也可以使用 asetInterval并让它运行,但问题是如果出现问题,您必须显式调用,clearInterval否则它只会不断抛出错误。
setTimeout只会抛出一个错误并停止(因为它不会调用另一个错误setTimeout)。setTimeout绝对是我和许多其他人的首选方法。
它也不会产生任何类型的堆栈溢出(就像正常的递归函数如果递归太长就会产生堆栈溢出一样),因为从这个意义上来说它并不是真正的递归。
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |