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

为什么i--后直接变为0?

<!DOCTYPE html>

<html>

 <head>

  <title>浏览器对象</title>  

  <meta http-equiv="Content-Type" content="text/html; charset=gkb"/>   

 </head>

 <body>

  <!--先编写好网页布局-->

  <h1>操作成功</h1>

  <p><span id="span"></span>秒后回到主页<a onclick="B_back()">返回</a></p>

 

  <script type="text/javascript">  

 

   //获取显示秒数的元素,通过定时器来更改秒数。

   // setTimeout(B_back,5000);

   // function B_back(){

   //     history.back();

   // }


   //让秒数从5递减到0

   i=5;

   document.getElementById("span").innerHTML=i;

   function changeSecond(){

   i--;

   document.getElementById("span").innerHTML=i;

   }

   for(a=0;a<5;a++){

   setTimeout(changeSecond,2000);

   }

   //通过window的location和history对象来控制网页的跳转。

 </script> 

</body>

</html>

原先设想是让秒数从5逐渐递减到0,但是实际运行时,秒数经过2000毫秒后立马从5变为0

http://img1.sycdn.imooc.com//596a4e710001d31502630170.jpg

正在回答

2 回答

for(a=0;a<5;a++){

   setTimeout(changeSecond,2000);

   }

这里相当于连续五次执行计时器 

是连续五次调用changeSecond()函数

所以i等于0

这是我写的 希望对你有帮助

<script >

 var num = 5

  document.getElementById("span").innerHTML = num

   function change(){

       num--;

    document.getElementById("span").innerHTML = num;

    if(num==0){

        window.open('http://www.imooc.com','_top');

    }

     setTimeout("change()",1000);

   }

   setTimeout("change()",1000);

</script>

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

吉夫 提问者

谢谢,但是for里面的函数不是一次一次执行的吗?为什么会连续执行呢?
2017-07-16 回复 有任何疑惑可以回复我~
#2

吉夫 提问者

刚才用if语句试了一下,发现了个更诡异的,运行后5递减到4就不动了,源代码在下面
2017-07-16 回复 有任何疑惑可以回复我~
#3

吉夫 提问者

非常感谢!
2017-07-16 回复 有任何疑惑可以回复我~
#4

吉夫 提问者

想了一下,大概是因为:for循环并没有等到changeSecond执行完才开始下一轮循环,而是在changeSecond刚开始执行时就立马进入下一轮循环,于是上一轮循环的changeSecond和下一轮循环的changeSecond叠加在一起,最终5轮循环的changeSecond叠加在一起,于是结果就是"5直接变为0"
2017-07-17 回复 有任何疑惑可以回复我~
#5

吉夫 提问者 回复 吉夫 提问者

if那个是搞错了,本来if就只执行一次而已,5变为4后不动原本就是正常的。
2017-07-17 回复 有任何疑惑可以回复我~
#6

慕粉13526308623 回复 吉夫 提问者

for循环里的内容只有执行完才会进行下一次循环 for循环里只是调用changeSecond()函数 changeSecond()函数执行的效果显示在页面上 并不在for循环里等待2s在执行下一个changeSecond() for循环执行速度很快 不到1ms就能执行完5次setTimeout() 最后的确可以看成是5个changeSecond()叠加执行,还是有些误差 你可以试试for循环一亿次 输出循环结果 看看for循环的速度 个人看法 参考看看即可
2017-07-17 回复 有任何疑惑可以回复我~
查看3条回复

<!DOCTYPE html>

<html>

 <head>

  <title>浏览器对象</title>  

  <meta http-equiv="Content-Type" content="text/html; charset=gkb"/>   

 </head>

 <body>

  <!--先编写好网页布局-->

  <h1>操作成功</h1>

  <p><span id="span"></span>秒后回到主页<a onclick="B_back()">返回</a></p>

 

  <script type="text/javascript">  


   //让秒数从5递减到0

   var i=5;

   document.getElementById("span").innerHTML=i;

   function changeSecond(){

   i--;

   document.getElementById("span").innerHTML=i;

   }

   var a=0

   if(a<5){

    a++;

   setTimeout(changeSecond,1000);

   }

   //通过window的location和history对象来控制网页的跳转。

 </script> 

</body>

</html>


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

举报

0/150
提交
取消

为什么i--后直接变为0?

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