JavaScript Window对象的setTimeout()方法中的默认超时是多少?

时间:2013-08-16 14:06:44

标签: javascript

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

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

5 个答案:

答案 0 :(得分:21)

HTML5 Timer spec说:

  

5)让超时成为第二个方法参数,如果省略参数则为零。

答案 1 :(得分:10)

如果您不想设置超时,则只需传递0

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

或者你可以省略延迟参数并假设0,但是,为了健壮性(和一般可读性),最好在那里传递某些东西

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

答案 2 :(得分:8)

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

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

JSFiddle:http://jsfiddle.net/losnir/PbJBA/
通过播放不同的超时值来进行操作。

不传递超时参数实际上与传递0相同。 但是,正如您所看到的,超时永远不会是0,这是因为您的回调函数将被放入队列中,并尽快执行(给定您请求的超时值)。

平均大约需要5毫秒,如果您的UI线程正在执行一些密集型任务,或者您的CPU忙碌 - 它可以像高几百毫秒一样,非常糟糕!< / p>

答案 3 :(得分:4)

According to the HTML5 specification

  

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

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

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

答案 4 :(得分:1)

是的,你可以在没有提供时间的情况下完成所有这些但是没有用

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

下次打勾时会触发

是的但它会使该函数异步,或稍后排队

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

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