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


Posted in Javascript onNovember 28, 2013

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的第一个参数改成函数对象,而不是字符串,就可以了。
Javascript 相关文章推荐
利用javascript移动div层-javascript 拖动层
Mar 22 Javascript
JavaScript动态插入script的基本思路及实现函数
Nov 11 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
Nov 02 Javascript
JavaScript返回网页中锚点数目的方法
Apr 03 Javascript
JQuery悬停控制图片轮播——代码简单
Aug 05 Javascript
js实现文字滚动效果
Mar 03 Javascript
jQuery UI结合Ajax创建可定制的Web界面
Jun 22 Javascript
js中通过getElementsByName访问name集合对象的方法
Oct 31 Javascript
jquery网页日历显示控件calendar3.1使用详解
Nov 24 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
May 13 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 #Javascript
JS小功能(checkbox实现全选和全取消)实例代码
Nov 28 #Javascript
JS小功能(onmouseover实现选择月份)实例代码
Nov 28 #Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
Nov 28 #Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
Nov 28 #Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
Nov 28 #Javascript
JS小功能(列表页面隔行变色)简单实现
Nov 28 #Javascript
You might like
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
[01:03:54]Liquid vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
用map函数来完成Python并行任务的简单示例
2015/04/02 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
Python字典实现简单的三级菜单(实例讲解)
2017/07/31 Python
图解Python变量与赋值
2018/04/03 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
浅谈tensorflow中张量的提取值和赋值
2020/01/19 Python
python和php哪个容易学
2020/06/19 Python
美国知名艺术画网站:Art.com
2017/02/09 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
安全员岗位职责
2013/11/11 职场文书
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
学困生转化工作总结
2015/08/13 职场文书
2015年国庆节寄语
2015/08/17 职场文书
体育教师研修感悟
2015/11/18 职场文书
简历自我评价范文
2019/04/24 职场文书