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 相关文章推荐
Jquery截取中文字符串的实现代码
Dec 22 Javascript
JavaScript实现添加及删除事件的方法小结
Aug 04 Javascript
Vue2实现组件props双向绑定
Dec 02 Javascript
JS实现双击内容变为可编辑状态
Mar 03 Javascript
详解在Vue中如何使用axios跨域访问数据
Jul 07 Javascript
js+html获取系统当前时间
Nov 10 Javascript
Angular中使用MathJax遇到的一些问题
Dec 15 Javascript
微信小程序多音频播放进度条问题
Aug 28 Javascript
jquery登录的异步验证操作示例
May 09 jQuery
使用apifm-wxapi快速开发小程序过程详解
Aug 05 Javascript
基于vue实现简易打地鼠游戏
Aug 21 Javascript
如何构建一个Vue插件并生成npm包
Oct 26 Javascript
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
牡丹941资料
2021/03/01 无线电
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
2007/12/23更新创意无限,简单实用(javascript log)
2007/12/24 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
原创jQuery弹出层插件分享
2015/04/02 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
jquery获取复选框checkbox的值的简单实现方法
2016/05/26 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
js的各种数据类型判断的介绍
2019/01/19 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
零基础写python爬虫之爬虫的定义及URL构成
2014/11/04 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
Pycharm Git 设置方法
2020/09/15 Python
python爬虫用request库处理cookie的实例讲解
2021/02/20 Python
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
Servlet如何得到客户端机器的信息
2014/10/17 面试题
前厅部经理岗位职责范文
2014/02/04 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
请假条标准格式规范
2014/04/10 职场文书
婚假请假条怎么写
2014/04/10 职场文书
2014企业年终工作总结
2014/12/23 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
2021/11/11 Python
基于docker安装zabbix的详细教程
2022/06/05 Servers
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS