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

标签 javascript settimeout

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

  1. 第一个参数中的函数需要被包围 报价,否则延迟设置为 0(一切都被执行 立即)。
  2. 超时后的一切都需要延迟 好吧,否则它会在超时完成之前执行。

如果有办法绕过 #2 - 那会很棒,但现在我只是对此感到好奇。

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

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

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

最佳答案

Functions in the first parameter need to be surrounded by quotations, or else the delay is set to 0 (Everything is executed instantly).

不一定。事实上,建议使用直接接受函数指针而不是字符串的重载,以避免解析它的开销:

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

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

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

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

var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);

关于javascript - 出于好奇 - 有人可以向我解释 setTimeout() 的奇怪之处吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9243675/

相关文章:

javascript - 区分单击和双击

javascript - 准确的 JavaScript 计时器

javascript - Uncaught ReferenceError : Invalid left-hand side in assignment

javascript - 将用户输入添加到 li 元素

javascript - 使用分隔符将对象键值组合成单个字符串

javascript - Ajax检查文件是否存在时设置超时

javascript - 单击时 chrome.notifications.create() 给出了错误的 id

javascript - 使用 settimeout 停止函数重新执行一秒钟

JavaScript setTimeout 0 阻塞页面渲染?

php - 将图像添加并拖动到 div 中