对window.setTimeout("sTimer(" + i + ")", i * 1000)的理解

本文详细解析了JavaScript中使用for循环与setTimeout函数结合实现的定时器原理,通过类比日常生活中的时间管理,帮助开发者深入理解其工作方式。文章还提供了实际应用场景,包括状态更新和用户交互响应,旨在提升开发者在复杂场景下灵活运用定时器的能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var wait = 15; //设置秒数(单位秒) 
var secs = 0;          
for(var i=1;i<=wait;i++) 

 window.setTimeout("sTimer("+i+")",i*1000); 

function sTimer(num) 

 if(num==wait) 
 { 
  document.getElementById("BtnOk").value=" 我同意 "; 
  document.getElementById("BtnOk").disabled=false; 
//document.onclick=window.open("http://jcj.liuzhou.gov.cn/jhxx/wyxx/"); 


 } 
 else 
 { 
  secs=wait-num; 
  document.getElementById("BtnOk").value="请先阅读举报须知 ("+secs+")"; 
 } 
 

}

释义:

对于那个for的理解是这样的:在向窗口添加setTimeout事件时,这只是一个注册过程而已,说白了就是一瞬间的事。

打个比方,你的理解是:我通知你:1小时后到老板办公室去,1小时后你去了。等你回来后我又通知你:2小时后到老板办公室去,你回来之后2小时后你去了。等你回来后我又通知你:3小时后到老板办公室去...加起来总共15个小时。

而实际情况是:我一次就通知你:1小时后到老板办公室去,2小时后到老板办公室去,3小时后到老板办公室去,4小时后到老板办公室去,5小时后到老板办公室去,结果是你每隔一个小时就去办公室一次,加起来总共5个小时。

所以,类比过来,这个for循环并不是你想象的那样:注册一个sTimer(1),等一秒,然后才能注册sTimer(2),这样完成。而是一瞬间把5个事件(sTimer(1),sTimer(2),sTimer(3),sTimer(4),sTimer(5),)都注册了,所以这5个事件是同时开始执行的,同时开始计时的。所以结果不是1秒后sTimer(1),之后2秒后sTimer(2)...而是——就一个具体时间来说:10:10:10打开网页,11秒sTimer(1),12秒sTimer(2)...因为它们是同一个时间起点,分别等1~5秒执行的,而不是等前一个sTimer结束后才开始计时的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PhoebeSky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值