您的位置
主页 > 网站技术 > 语言编程 > » 正文

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

来源: 站长圈 点击:

javascript中定时器setTimeout无法调用局部变量,只需要将setTimeout的第一个参数改成函数对象,而不是字符串,就可以了。

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

复制代码 代码如下:

var angle = 0; 

function rotateloop() { 

if (angle < 360) { 

angle++; 

//use angle 

//...... 

setTimeout("rotateloop()", 100); 

function beginrotate() { 

//do something 

//...... 

setTimeout("rotateloop()", 100); 

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

复制代码 代码如下:

function beginrotate() { 

var angle = 0; 

function rotateloop() { 

if (angle < 360) { 

angle++; 

//use angle 

//...... 

setTimeout("rotateloop()", 100); 

//do something 

//...... 

setTimeout("rotateloop()", 100); 

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

复制代码 代码如下:

function beginrotate() { 

var angle = 0; 

function rotateloop() { 

if (angle < 360) { 

angle++; 

//use angle 

//...... 

setTimeout(rotateloop, 100); 

//do something 

//...... 

setTimeout(rotateloop, 100); 

只需要将setTimeout的第一个参数改成函数对象,而不是字符串,就可以了。 




首页  - 关于站长圈  - 广告服务  - 联系我们  - 关于站长圈  - 网站地图  - 版权声明