只是出于好奇 - 有人可以向我解释setTimeout()的奇怪之处吗?

TJ *_*dle 1 javascript settimeout

奇怪的是,我指的是这两件事:

  1. 第一个参数中的函数需要用引号括起来,否则延迟设置为0(一切都立即执行).
  2. 超时后的所有内容都需要延迟,否则在超时完成之前执行.

如果有一种绕过#2的方式 - 这将是非常棒的,但是现在我只是好奇这一点.

简短的片段来解释我在说什么:

for (var i=0; i<10; i++) setTimeout("addInput('.')",i*500);
setTimeout('addInput("</br>")',5100);
Run Code Online (Sandbox Code Playgroud)

在上面,除非addInput('.')被引号括起,否则忽略延迟并且只执行代码; 除非我向第二行添加超时,否则它将在第一个超时完成之前执行.

Dar*_*rov 5

第一个参数中的函数需要用引号括起来,否则延迟设置为0(一切都立即执行).

不必要.实际上建议使用直接使用函数指针而不是字符串的重载来避免解析它的开销:

for (var i=0; i<10; i++) {
    setTimeout(function() {
        addInput('.');
    }, i * 500);
}
Run Code Online (Sandbox Code Playgroud)

或其等价物(警告:在IE中不起作用):

for (var i=0; i<10; i++) {
    setTimeout(addInput, i * 500, '.');
}
Run Code Online (Sandbox Code Playgroud)

以下setTimeout重载是最常用的重载:

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
Run Code Online (Sandbox Code Playgroud)