如何延迟JavaScript

Web*_*net 1 javascript

.defer(5000)导致too much recursionJavaScript出错.如何将执行延迟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);
  }
}
Run Code Online (Sandbox Code Playgroud)

Ple*_*and 5

这整行:

Spire.Rotator.rotate().defer(5000);
Run Code Online (Sandbox Code Playgroud)

是错的.由于后面的括号rotate,您的函数会立即反复调用(无限递归).删除括号将解决该问题,但代码可能无法正常工作.要修复代码,请使用浏览器的window.setTimeout方法,该方法接受函数和延迟(以毫秒为单位)作为两个参数:

setTimeout(function() {
    Spire.Rotator.rotate();
}, 5000);
Run Code Online (Sandbox Code Playgroud)

为什么不setTimeout(Spire.Rotator.rotate, 5000);呢?原因在于,this该功能window不是Spire.Rotator.(互联网上有很多关于此的信息.)为什么不setTimeout("Spire.Rotator.rotate()", 5000);呢?这是一种非常过时(弃用)的方法,可以使用与eval相同的陷阱的方法,这是一些包括Douglas Crockford建议不使用的JavaScript程序员的功能.