精解window.setTimeout()&window.setInterval()使用方式与参数传递问题!


Posted in Javascript onNovember 23, 2007

在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的。这是我们常常会使用方法setInterval或setTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。

    我们常用的使用场景是: 

window.setTimeout("delayRun()", n);  
window.setInterval("intervalRun()", n);  
window.setTimeout(delayRun, n);  
window.setInterval(intervalRun, n); 

    显然强行代参数的调用: window.setTimeout("delayRun(param)", n); 
window.setInterval("intervalRun(param)", n);  
window.setTimeout(delayRun(param), n);  
window.setInterval(intervalRun(param), n); 

    都是错误的,因为string literals形式的方法调用,param必须是全局变量(即window对象上的变量)才行;而function pointer形式的调用,完全错误了,这是把函数的返回值当成了setTimeout/setInterval函数的参数了,完全不是我们所望的事情。

    解决这个问题的办法可以使用匿名函数包装的方式,在以下scenario中我们这么做: 

function foo()  
{  
    var param = 100;  
    window.setInterval(function()  
    {  
        intervalRun(param);  
    }, 888);  
}  function interalRun(times)  
{  
    // todo: depend on times parameter  
} 
    这样一来,就可以不再依赖于全局变量向delayRun/intervalRun函数中传递参数,毕竟当页面中的全局变量多了以后,会给脚本的开发、调试和管理等带来极大的puzzle。
Javascript 相关文章推荐
javascript 用记忆函数快速计算递归函数
Mar 15 Javascript
javascript 获取页面的高度及滚动条的位置的代码
May 06 Javascript
javascript通过class来获取元素实现代码
Feb 20 Javascript
jQuery获取浏览器中的分辨率实现代码
Apr 23 Javascript
javascript里使用php代码实例
Dec 13 Javascript
JavaScript手机振动API
Jun 11 Javascript
js+css3制作时钟特效
Oct 16 Javascript
解析Javascript单例模式概念与实例
Dec 05 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
Angular6 Filter实现页面搜索的示例代码
Dec 02 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
Jan 18 Javascript
Vue中实现权限控制的方法示例
Jun 07 Javascript
document.designMode的功能与使用方法介绍
Nov 22 #Javascript
Flash+XML滚动新闻代码 无图片 附源码下载
Nov 22 #Javascript
摘自百度的图片轮换效果代码
Nov 19 #Javascript
window.open被浏览器拦截后的自定义提示效果代码
Nov 19 #Javascript
比较简单实用的使用正则三种版本的js去空格处理方法
Nov 18 #Javascript
利用ASP发送和接收XML数据的处理方法与代码
Nov 13 #Javascript
javascript实现二分查找法实现代码
Nov 12 #Javascript
You might like
php调用mysql存储过程
2007/02/14 PHP
php轻松实现中英文混排字符串截取
2014/05/28 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
有关js的变量作用域和this指针的讨论
2010/12/16 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
分享使用AngularJS创建应用的5个框架
2015/12/05 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
thinkphp标签实现bootsrtap轮播carousel实例代码
2017/02/19 Javascript
微信小程序城市定位的实现实例(获取当前所在国家城市信息)
2017/05/17 Javascript
jQuery 实现双击编辑表格功能
2017/06/19 jQuery
angularjs下拉框空白的解决办法
2017/06/20 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
前端使用crypto.js进行加密的函数代码
2020/08/16 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
python中常用的各种数据库操作模块和连接实例
2014/05/29 Python
Python判断操作系统类型代码分享
2014/11/22 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
PyQt5 QListWidget选择多项并返回的实例
2019/06/17 Python
python实现ip代理池功能示例
2019/07/05 Python
用python爬取历史天气数据的方法示例
2019/12/30 Python
django实现HttpResponse返回json数据为中文
2020/03/27 Python
python中count函数知识点浅析
2020/12/17 Python
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
大学生党员自我批评
2014/02/14 职场文书
文艺晚会主持词
2014/03/24 职场文书
2015年机关党建工作总结
2015/05/22 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
跟班学习心得体会(共6篇)
2016/01/23 职场文书