js的递增问题,大家看看

lovelxj 2005-07-15 04:46:34
我的意图是从10000循环到1000000
但是这个JS代码为什么会跳过10004,10005 。
而且下一组合是上一组合的尾数乘以2

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>

<div id="divQQ1"></div>
<div id="divQQ2"></div>
<script language="javascript">
var intI=100000;
function displayQQ()
{
if(intI>100000000)
return;

divQQ1.innerHTML = intI;
intI++;
divQQ2.innerHTML = intI;
intI++;
setInterval("displayQQ()",2000);
}
displayQQ();
</script>
</body>
</html>
...全文
120 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovelxj 2005-07-24
  • 打赏
  • 举报
回复
多谢楼上2位的精妙解释

俺明白意思了。。。 多谢2位
seeu1688 2005-07-16
  • 打赏
  • 举报
回复
JK纠正了setInterval的用法。。
我只能解释一下为何出现“而且下一组合是上一组合的尾数乘以2”的现象了...-_-||

displayQQ内的setInterval被循环启动,造成每隔2秒该函数即被Math.pow(2,n)次执行

且每次执行,intI均被两次加1,这样可以排出一个数学公式

每隔两秒后,divQQ1内的数为

10000 + ∑Math.pow(2,n)

n表示第n个两秒后

再化简一步,即为:

10000 + Math.pow(2, n + 1) - 2

于是2秒后是10002,4秒后是10006,6秒后是10014....

突然发现自己对于高等数学已相当生疏了。。。扼腕叹息,学不如用

AOB,
这种随时间指数级触发函数的方式最终将导致系统资源被脚本耗尽,ie无疾而终。。。
不要在函数里使用setInterval,若一定要在函数里递归调用,要使用
window.setTimeout("displayQQ()",2000);
而不是
window.setInterval("displayQQ()",2000);


JK_10000 2005-07-15
  • 打赏
  • 举报
回复
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>

<div id="divQQ1"></div>
<div id="divQQ2"></div>
<script language="javascript">
var intI=100000;
function displayQQ()
{
if(intI>100000000)
return;

divQQ1.innerHTML = intI;
intI++;
divQQ2.innerHTML = intI;
intI++;
}
setInterval("displayQQ()",2000);//把这一句话移到function外面来

//displayQQ();
</script>
</body>
</html>

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧