24

根据W3Schools ,超时是必需的参数。但是可以在没有超时参数的情况下调用它。

function eventHandler(e) {
    var t = setTimeout(function () {
        clearTimeout(t);
        alert('Called');
    });
}
4

5 回答 5

34

HTML5Timer规范说:

5) 让 timeout 为第二个方法参数,如果参数被省略则为零。

于 2013-08-16T14:19:46.367 回答
13

你为什么不自己检查一下?文档总是受欢迎的,但是你不能打败现实世界的例子:

var startTime = Date.now();
setTimeout(function () {
    var endTime = Date.now();
    alert("timeOut was: " + (endTime - startTime) + "ms");
});

JSFiddle: http: //jsfiddle.net/losnir/PbJBA/
尝试 使用不同的超时值。

不传递超时参数实际上与传递0. 但是,如您所见, timeout 是 never 0,这是因为您的回调函数将被放入队列中,并尽快执行(给定您请求的超时值)。

它平均约为 5 毫秒,如果您的 UI 线程正在执行一些密集型任务,或者您的 CPU 很忙 - 它可能高达数百毫秒,太糟糕了

于 2013-08-16T14:31:54.313 回答
12

如果您不想设置超时,则只需通过0

setTimeout(function() {
    ...
}, 0);

或者,您可以省略延迟参数并0假设,但是,为了稳健性(和一般可读性),最好在其中传递一些东西

注意 - 这并不能保证您的代码会立即运行。只要 UI 线程可用于处理它,它就会将您的任务排入队列以运行。

于 2013-08-16T14:10:05.223 回答
4

根据 HTML5 规范

当上述方法要获取超时时,它们必须运行以下步骤:

  • 让 timeout 成为方法的第二个参数,或者如果参数被忽略则为零
  • 将 ToString() 抽象操作应用于超时,并以超时为结果。[ECMA262]
  • 将 ToNumber() 抽象操作应用于超时,并以超时为结果。[ECMA262]
  • 如果 timeout 是 Infinity 值、非数字 (NaN) 值或负数,则让 timeout 为零。
  • 将 timeout 向下舍入到最接近的整数,并让 timeout 作为结果。
  • 返回超时。

请注意,指定的零超时实际上可能不会延迟零毫秒。有关详细信息,请参阅规范setTimeout

于 2013-08-16T14:16:27.950 回答
1

是的,您可以在不提供时间的情况下全部完成,但它没有用

setTimeout(
function() {
 alert("asdf");
    })

它将在下一个滴答声中触发

是的,但它会使该功能异步,或排队等待

setTimeout(function() { alert("msg1");
    })
alert("msg2");

在上面的代码中,首先显示 msg2。

于 2013-08-16T14:12:16.730 回答