奇怪的是,我指的是这两件事:
- 第一个参数中的函数需要被包围 报价,否则延迟设置为 0(一切都被执行 立即)。
- 超时后的一切都需要延迟 好吧,否则它会在超时完成之前执行。
如果有办法绕过 #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/