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的prototype属性
Feb 11 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
JS实现刷新父页面不弹出提示框的方法
Jun 22 Javascript
微信小程序 location API接口详解及实例代码
Oct 12 Javascript
高效的jQuery代码编写技巧总结
Feb 22 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
微信小程序 wx:for的使用实例详解
Apr 27 Javascript
js链表操作(实例讲解)
Aug 29 Javascript
原生js+cookie实现购物车功能的方法分析
Dec 21 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
Jul 12 Javascript
vue-cli项目修改文件热重载失效的解决方法
Sep 19 Javascript
JS使用Prim算法和Kruskal算法实现最小生成树
Jan 17 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
解析PHP实现下载文件的两种方法
2013/07/05 PHP
php中的比较运算符详解
2013/10/28 PHP
php中操作memcached缓存进行增删改查数据的实现代码
2014/08/15 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
你所要知道JS(DHTML)中的一些技巧
2007/01/09 Javascript
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
基于jQuery实现的QQ表情插件
2015/08/25 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
vue 点击其他区域关闭自定义div操作
2020/07/17 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python中getaddrinfo()基本用法实例分析
2015/06/28 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python列表使用实现名字管理系统
2019/01/30 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
护理专业本科生自荐信
2013/10/01 职场文书
信息部岗位职责
2013/11/12 职场文书
自荐信封面
2013/12/04 职场文书
专业技术职务聘任书
2014/03/29 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL
JavaWeb实现显示mysql数据库数据
2022/03/19 Java/Android
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers