亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么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.xianlaiwan.cn','_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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號