use*_*469 1 javascript settimeout
我有一个数组s=[John; Alex; Mark],我想逐个延迟地显示这个数组的元素.
for (var i=0; i<=3; i++)
{
setTimeout(function(){x.innerHTML=s[i]},3000)
}
Run Code Online (Sandbox Code Playgroud)
这似乎很简单的问题,但我无法弄清楚.
Aln*_*tak 11
setTimeout 以小写字母开头 s3000 * i,不是,3000或者他们都会立即开火i,而不是你在循环中看到的值.这工作,并完全避免循环变量问题:
var s = ['John', 'Mark', 'Alex'];
var i = 0;
(function loop() {
x.innerHTML = s[i];
if (++i < s.length) {
setTimeout(loop, 3000); // call myself in 3 seconds time if required
}
})(); // above function expression is called immediately to start it off
Run Code Online (Sandbox Code Playgroud)
注意它如何使用"伪递归"在上一次迭代完成后触发3000ms的下一次迭代.这对于让n优秀的计时器同时等待是最好的.
见http://jsfiddle.net/alnitak/mHQVz/