function onload_animate(id_name, img_src1, img_src2, time_ms){
document.getElementById(id_name).src = img_src1;
setTimeout("onload_animate(id_name, img_src1, img_src2, time_ms)", time_ms);
document.getElementById(id_name).src = img_src2;
}
这是我给出的代码。我想在每次递归调用中从setTimeout()中的onload_animate(param1,param2,...)访问相同的参数值。怎么可能?
答案 0 :(得分:3)
如果将settimeout
回调放入匿名函数中,它应该可以正常工作。这样参数就在范围内。
function onload_animate(id_name, img_src1, img_src2, time_ms){
document.getElementById(id_name).src = img_src1;
setTimeout(
function(){
onload_animate(id_name, img_src1, img_src2, time_ms);
}, time_ms);
document.getElementById(id_name).src = img_src2;
}
尝试阅读javascript closures,它们非常有用。
答案 1 :(得分:1)
传递setTimeout
一个字符串被认为是不好的做法。这类似于使用eval()
,这在JavaScript中是邪恶的。
function onload_animate(id_name, img_src1, img_src2, time_ms){
document.getElementById(id_name).src = img_src1;
setTimeout(function () {
onload_animate(id_name, img_src1, img_src2, time_ms);
}, time_ms);
document.getElementById(id_name).src = img_src2;
};
将捕获变量,使其在setTimeout
内可用。请注意,此功能目前将永远循环;你需要某种形式的退出(通常检查条件;例如time_ms
已经过期了吗?)
您的代码应该看起来像这样;
function onload_animate(id_name, img_src1, img_src2, time_ms) {
document.getElementById(id_name).src = img_src1;
setTimeout(function () {
onload_animate(id_name, img_src2, img_src1, time_ms);
}, time_ms);
};
有关工作示例,请参阅此代码段:http://www.jsfiddle.net/3vKnW/。
JavaScript不等待setTimeout
完成。它是异步的。 JavaScript会点击setTimeout
行,计划在time_ms
时间内运行该函数,但会返回并继续执行它停止的位置。
答案 2 :(得分:0)
使用setInterval
不是更好吗?
var int=self.setInterval("onload_animate()",time_ms);