javascript setTimeout无法调用局部变量的解决办法
2013-11-28 14:53
453 查看
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的第一个参数改成函数对象,而不是字符串,就可以了。
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的第一个参数改成函数对象,而不是字符串,就可以了。
相关文章推荐
- js 定时器setTimeout无法调用局部变量的解决办法
- js 定时器setTimeout无法调用局部变量的解决办法
- android 调用javascript 无法弹出Alert的解决办法
- 原创IE无法打开javascript链接(点击无反应)的解决办法
- spring AOP中自身方法调用无法应用代理解决办法
- 织梦arclist标签无法调用副栏目文章的解决办法
- EasyJSWebView二次加载时JS无法调用原生代码解决办法
- 织梦dedecms — advancedsearch精确查询,根据自定义字段查询,查询结果页面无法调用自定义字段,头部,尾部,解决办法
- JavaScript调用传递变量参数的相关问题及解决办法
- 安卓EditText有时点击后无法自动弹出键盘的解决办法;TextWatcher多次调用问题
- SP2-1503: 无法初始化 Oracle 调用界面 SP2-1503: 无法初始化 Oracle 问题的解决办法
- jQuery UI调用draggable之后无法拖拽的解决办法
- PHP中cookies跨目录无法调用解决办法
- C#技巧【调用线程无法访问此对象,因为另一个线程拥有该对象的问题的解决办法】【C#读写EXCEL源码提示“office检测到此文件存在一个问题。为帮助保护您的计算机,不能打开此文件”的解决】
- vs2015中c++中multiset容器定义对象时参数列表中显式调用greater无法被识别的解决办法
- jframe 对象(GroupedAction)传递无法调用对象的方法解决办法
- [Javascript]关于在ASP.NET环境中调用梅花雨的日历控件出错的解决办法
- Visual studio 2017中 Javascript无法智能提示的解决办法
- 关于Bootstrap弹出框无法调用问题的解决办法