为了账号安全,请及时绑定邮箱和手机立即绑定

代码我读了好几遍,觉得没问题啊,但是读秒总是出错,真不知道哪错了!!!哭了!


<!DOCTYPE html>
<html>
 <head>
  <title>浏览器对象</title>  
  <meta http-equiv="Content-Type" content="text/html; charset=gkb"/>   
 </head>
 <body>
  <!--先编写好网页布局-->
 <h3>操作成功</h3>
<b id="s">5</b>秒后回到主页<a href="" onclick="goback()">返回</a>
<script type="text/javascript">
var sec=5;
setTimeout(clock,1000);
function clock()
{
    document.getElementById("s").innerHTML=sec;
    if (sec==1)
    window.location.href =  "http://www.imooc.com/";
    sec=sec-1;
    setInterval(clock,1000);
}
function goback()
{
    window.history.back();
}
   
 </script> 
</body>
</html>


正在回答

3 回答

先不要哭,代码看完,你写的里边if(sec == 1){}后边加上{}这个。其次你每次回调clock的时候就会生成一次定时器。当前5-4-3 调用2次的时候,你代码其实有两个定时器,每个定时器都会把sec-1,这样的话你sec每一秒会被减两次 所以你的sec会跳着走,5-4-3-1-负2,以下是正确代码,望采纳。

https://img1.sycdn.imooc.com//5d3832eb00012d2d07260377.jpg


0 回复 有任何疑惑可以回复我~
#1

AMingxy 提问者

我这个的读秒显示是542-2,我懂你的意思,说有两个定时器,但是我觉得,它每次一经过document.getElementById("s").innerHTML=sec; 这个语句,它的显示就要变啊,就会减一的;虽然说它是迭代调用,但是它读函数肯定要一步步进行,碰到那个语句,显示就会变
2019-07-24 回复 有任何疑惑可以回复我~
#2

AMingxy 提问者

你说的确实对,我把这个语句setInterval(clock,1000);提到函数上面来就会,显示正确。但是我不能理解这个读秒的差异是怎么来的,你能给我解释一下吗?
2019-07-24 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5d383c94000190bb05620233.jpg

在这个例子你可以观察下浏览器,根本看不到节点变成了 你好前端 。他是直接变成了  你好后端

0 回复 有任何疑惑可以回复我~
#1

AMingxy 提问者

我想知道这是用的啥软件啊
2019-07-25 回复 有任何疑惑可以回复我~
#2

吴量 回复 AMingxy 提问者

vscode编辑器
2019-07-25 回复 有任何疑惑可以回复我~

两个定时器 减的sec的值,document.getElementById("s").innerHTML=sec这句话执行二次,浏览器肯定会存在一个先后调用的过程,但是如果先后两个操作值做一件事(类似操作节点。),且时间间隔非常小,浏览器就只执行最后那一个要做的那个事

0 回复 有任何疑惑可以回复我~
#1

AMingxy 提问者

明白啦,谢谢啦
2019-07-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

代码我读了好几遍,觉得没问题啊,但是读秒总是出错,真不知道哪错了!!!哭了!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信