调用setTimeout的函数是什么?

Cla*_*diu 11 javascript

我有这样的代码:

setTimeout(foo, 600);
Run Code Online (Sandbox Code Playgroud)

我一直认为foo没有任何争论,例如:

function foo() { /* bars */ }
Run Code Online (Sandbox Code Playgroud)

但是,执行以下操作:

function foo(a) { alert(a); /* bars */ }
Run Code Online (Sandbox Code Playgroud)

弹出一个显示-7的警报.这个数字代表什么?

Nic*_*ole 8

它是从计划运行它到实际运行时的时间差(以毫秒为单位).

alert(setTimeout(function(a) { alert(a) }, 2000));
Run Code Online (Sandbox Code Playgroud)

如果您及时清除第一个警报,您将看到下一个警报在-10到10之间.如果您等待几秒钟,您将看到大约等于2000的时间.

setInterval也可以看到同样的事情.在Firebug中运行以下命令:

setInterval(function(a) { alert(a); }, 2000);
Run Code Online (Sandbox Code Playgroud)

尝试快速关闭警报,它将再次在0左右.保持开放 - 它会给你一个很大的价值.

注意这是在Firefox Mac上,保持警报打开将停止Javascript处理,因此在关闭警报之前计时器不会执行.上述测试的行为在其他浏览器中可能会有所不同