.defer(5000)
导致JavaScript中出现too much recursion
错误。如何将执行延迟5秒?
rotate: function () {
if (!paused) {
this.show(counter);
counter = counter + 1;
if (counter === Spire.Rotator.data.items.length) {
counter = 0;
}
Spire.Rotator.rotate().defer(5000);
//$.proxy(Spire.Rotator.rotate, Spire.Rotator).defer(delay);
}
}
最佳答案
这整行:
Spire.Rotator.rotate().defer(5000);
是错的。由于
rotate
后面的括号,您的函数立即一次又一次地调用自身(无限递归)。删除括号可以解决该问题,但是代码可能无法正常工作。要修复代码,请使用浏览器的window.setTimeout
method,它接受一个函数和一个延迟(以毫秒为单位)作为两个参数:setTimeout(function() {
Spire.Rotator.rotate();
}, 5000);
为什么不只是
setTimeout(Spire.Rotator.rotate, 5000);
?原因是该函数中的this
将是window
而不是Spire.Rotator
。 (有关此内容,互联网上有plenty of information。)为什么没有setTimeout("Spire.Rotator.rotate()", 5000);
?这是一种使用过时(已过时)的方法来使用受相同pitfalls of eval折磨的方法,该函数是包括Douglas Crockford在内的某些JavaScript程序员建议不要使用的函数。