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

来源:8-17 编程练习

AMingxy

2019-07-24 17:40


<!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回答

  • 吴量
    2019-07-24 18:34:38
    已采纳

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

    https://img.mukewang.com/5d3832eb00012d2d07260377.jpg


    AMingx...

    你说的确实对,我把这个语句setInterval(clock,1000);提到函数上面来就会,显示正确。但是我不能理解这个读秒的差异是怎么来的,你能给我解释一下吗?

    2019-07-24 19:04:42

    共 2 条回复 >

  • 吴量
    2019-07-24 19:11:34

    https://img2.mukewang.com/5d383c94000190bb05620233.jpg

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

    吴量 回复AMingx...

    vscode编辑器

    2019-07-25 21:17:50

    共 2 条回复 >

  • 吴量
    2019-07-24 19:06:55

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

    AMingx...

    明白啦,谢谢啦

    2019-07-24 19:08:50

    共 1 条回复 >

JavaScript进阶篇

本课程从如何插入JS代码开始,带您进入网页动态交互世界

468194 学习 · 21891 问题

查看课程

相似问题