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