为啥这种写法,js的setTimeout只执行一次?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥这种写法,js的setTimeout只执行一次?相关的知识,希望对你有一定的参考价值。

function delayURL(url, time)
Time();//如果改为setTimeout("Time()",1000)就可以了??为什么??
setTimeout("top.location.href='" + url + "'", time);


var time = 3;
function Time()

time = time-1;
document.getElementById('second').innerHTML=time;
setTimeout("Time()",1000);

delayURL('article.jsp','3000');

参考技术A setTimeout是延迟执行,只执行一次,不是定时器
多次间断执行要用setInterval
var timer = setInterval( function(), 1000);

取消用clearInterval(timer);追问

看到time里面还有一个循环了吗?我跳转是可以的,其中有一个倒计时的功能我是通过settimeout 里面再对settimeout进行调用实现循环,如果有setTimeout("Time()",1000)就可以实现3,2,1,0这样的。如果变成time()就不出现3,2,1只有3,time函数只用了一次。

追答


我认真看了下
首先js执行delayURL('article.jsp','3000');
执行到了
delayURL()
但是先执行了Time();
time由3变为2再变为1再变为0,染后变为-1……
你应该在Time()函数里加个判断
if(time==0)

top.location.href=url;

你说delayURL函数里改为
setTimeout("Time()",1000);
setTimeout("top.location.href='" + url + "'", time);
可以
其实就可以
因为
setTimeout("Time()",1000);
这句指延迟1000毫秒执行Time函数
setTimeout("top.location.href='" + url + "'", time);
这句指延迟3毫秒执行"top.location.href='" + url + "'",命令
当然3毫秒执行的快了
应该是这样

本回答被提问者和网友采纳

以上是关于为啥这种写法,js的setTimeout只执行一次?的主要内容,如果未能解决你的问题,请参考以下文章

JS 定时器的4种写法及介绍

settimeout和setInterval为啥连续调就不准了

JS 定时器的4种写法及介绍

js定时器setInterval() 和setTimeout()的区别

setTimeout的一些细节

js定时器之setTimeout的使用