加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

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

发布时间:2023-08-05 14:34:09 所属栏目:教程 来源:
导读:javascript中定时器setTimeout的用法一般如下,调用beginrotate之后就进入定时执行rotateloop的一个过程,如下代码:

代码如下:

var angle = 0;

function rotateloop() {

if (angle < 360) {

an
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的第一个参数改成函数对象,而不是字符串,就可以了。
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章