Heim  >  Artikel  >  Web-Frontend  >  js 定时器setTimeout无法调用局部变量的解决办法_javascript技巧

js 定时器setTimeout无法调用局部变量的解决办法_javascript技巧

WBOY
WBOYOriginal
2016-05-16 17:11:561285Durchsuche

javascript中定时器setTimeout的用法一般如下,调用beginrotate之后就进入定时执行rotateloop的一个过程,如下代码:

复制代码 代码如下:

var angle = 0;

function rotateloop() {
if (angle angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}

function beginrotate() {
//do something
//......
setTimeout("rotateloop()", 100);
}

这段代码有一个问题,就是产生了一个全局变量angle,这显然不是好的编程习惯,所以我们想到使用内嵌函数的方式,将代码改成如下:
复制代码 代码如下:

function beginrotate() {

var angle = 0;

function rotateloop() {
if (angle angle++;
//use angle
//......
setTimeout("rotateloop()", 100);
}
}
//do something
//......
setTimeout("rotateloop()", 100);
}

这样子改了之后,发现javascript报错了,rotateloop找不到,显然setTimeout没有找到rotateloop这个局部内嵌函数,这里只要稍微改一下就可以解决这个问题了,代码如下:
复制代码 代码如下:

function beginrotate() {

var angle = 0;

function rotateloop() {
if (angle angle++;
//use angle
//......
setTimeout(rotateloop, 100);
}
}
//do something
//......
setTimeout(rotateloop, 100);
}

只需要将setTimeout的第一个参数改成函数对象,而不是字符串,就可以了。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn