js代码,关于setInterval无法停止的问题!

<script>functionrun(){vars=setInterval("a()",40)}functiona(){varb=0;vari=document.bod... <script>
function run(){var s = setInterval("a()",40)}
function a(){
var b = 0;
var i = document.body.scrollTop;
var i = i*0.5;window.scrollTo(0,i)
if(b<6)
{
var b=b++;
}
else
{
clearInterval(s)
}
}
</script>

运行后无法停止,无限运行!那里出了问题?
展开
 我来答
匿名用户
2014-03-21
展开全部

那是因为,js在,var是声明变量

但有点不同的是,看是在哪里声明,

如果,var是在函数方法function之内声明的,那变量只作用于该函数本身

如果是在函数方法之外声明的,那就是全局变量,无论在函数内函数外都能起作用(当然,在声明之前的代码是作用不到的)

根据这个原理

clearInterval(s) 这个s根本就不存在!

改正如下:

<script>
 var s, b = 0;
 function run(){s = setInterval("a()",40)}
 function a(){
  var i = document.body.scrollTop,i = i*0.5;
  window.scrollTo(0,i)
  if(b<6){
    b++;
  }else {
   clearInterval(s)
  }
 }
</script>

哦,你要有个错误

就是在被循环的函数内声明变量b,并且赋值为0;

那么,这个函数每运行一次,无论b的值是多少,是不是用于都会被归为0呢?

是不是永远的是小于6呢?

既然是小于6,那有怎么会停止呢?

低调的猥琐大叔
2014-03-22 · 超过13用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:26.1万
展开全部
第一个问题如第一位热心者回答的那样,作用域问题
第二个问题,var b声明应该放到函数外面去,不然每循环一次,就重新声明b=0一次,导致b永远不会小于6
第三个问题b=b++,意思是右边的b先把自身赋值给左边,然后自加。所以你可以写成b++或者b=b+1;
正确实现方法楼上已经实现,楼主可以研究下
追问
现在代码可以停止了,但是只能运行一次!再次点击只会让i*0.5,好像不能创建var s = setInterval("a()",40)。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式