Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中延迟_Javascript - Fatal编程技术网

如何在JavaScript中延迟

如何在JavaScript中延迟,javascript,Javascript,.defer(5000)在JavaScript中导致了太多递归错误。如何将执行延迟5秒 rotate: function () { if (!paused) { this.show(counter); counter = counter + 1; if (counter === Spire.Rotator.data.items.length) { counter = 0; } Spire.Rotator.rotate().defer(

.defer(5000)
在JavaScript中导致了
太多递归
错误。如何将执行延迟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);
为此:

setTimeout(Spire.Rotator.rotate, 5000);

是javascript在指定时间后执行某些javascript代码的本机方式

只需将其替换为:

Spire.Rotator.rotate().defer(5000);
为此:

setTimeout(Spire.Rotator.rotate, 5000);

是javascript在指定时间后执行某些javascript代码的本机方式

实际上,在您的代码中,从不调用defer()。假设您定义的旋转方法是针对Spire.Rotator对象的,则会发生以下情况:

rotate() calls rotate() calls rotate() calls rotate() .... [to infinity]
调用次数
infinity
之后,
infiniteth
调用的返回值将调用defer方法。但是你必须等待无限次的调用发生,这需要花费
永恒
秒来完成


您需要的是。

实际上,在您的代码中,从不调用defer()。假设您定义的旋转方法是针对Spire.Rotator对象的,则会发生以下情况:

rotate() calls rotate() calls rotate() calls rotate() .... [to infinity]
调用次数
infinity
之后,
infiniteth
调用的返回值将调用defer方法。但是你必须等待无限次的调用发生,这需要花费
永恒
秒来完成

您需要的是。

这整行:

Spire.Rotator.rotate().defer(5000);
这是错误的。由于
rotate
后面的括号,函数会立即一次又一次地调用自身(无限递归)。删除括号可以解决这个问题,但代码可能无法工作。要修复代码,请使用浏览器的,它接受函数和延迟(以毫秒为单位)作为两个参数:

setTimeout(function() {
    Spire.Rotator.rotate();
}, 5000);
为什么不干脆
setTimeout(Spire.Rotator.rotate,5000)?原因是该函数中的
将是
窗口
,而不是
螺旋旋转器
。(互联网上有这方面的信息。)为什么不
setTimeout(“Spire.Rotator.rotate()”,5000)?这是一种非常过时(已弃用)的方法,该方法与Douglas Crockford等一些JavaScript程序员建议不要使用的函数有相同之处。

整行代码:

Spire.Rotator.rotate().defer(5000);
这是错误的。由于
rotate
后面的括号,函数会立即一次又一次地调用自身(无限递归)。删除括号可以解决这个问题,但代码可能无法工作。要修复代码,请使用浏览器的,它接受函数和延迟(以毫秒为单位)作为两个参数:

setTimeout(function() {
    Spire.Rotator.rotate();
}, 5000);

为什么不干脆
setTimeout(Spire.Rotator.rotate,5000)?原因是该函数中的
将是
窗口
,而不是
螺旋旋转器
。(互联网上有这方面的信息。)为什么不
setTimeout(“Spire.Rotator.rotate()”,5000)?这是一种非常过时(已弃用)的方法,使用的方法也有同样的问题,包括Douglas Crockford在内的一些JavaScript程序员建议不要使用该函数。

不要使用字符串作为设置超时的参数。它是有效的,但容易引用地狱,而且速度也很慢。改用函数:
setTimeout(Spire.Rotator.rotate,5000)
不要将字符串用作setTimeout的参数。它是有效的,但容易引用地狱,而且速度也很慢。改用函数:
setTimeout(Spire.Rotator.rotate,5000)