精解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 相关文章推荐
IE JS编程需注意的内存释放问题
Jun 23 Javascript
Javascript 面向对象 继承
May 13 Javascript
js判断undefined类型示例代码
Feb 10 Javascript
JavaScript将字符串转换为整数的方法
Apr 14 Javascript
基于jquery实现省市区三级联动效果
Dec 25 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
Aug 05 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
Jan 11 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
JS判断微信扫码的方法
Aug 07 Javascript
浅谈mint-ui loadmore组件注意的问题
Nov 08 Javascript
深入浅析Node环境和浏览器的区别
Aug 14 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
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
php实现文件编码批量转换
2014/03/10 PHP
AJAX的使用方法详解
2017/04/29 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
cookie 最近浏览记录(中文escape转码)具体实现
2013/06/08 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
javaScript中with函数用法实例分析
2015/06/08 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
jquery实现删除一个元素后面的所有元素功能
2015/12/21 Javascript
js基于cookie记录来宾姓名的方法
2016/07/19 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
Angular2使用Guard和Resolve进行验证和权限控制
2017/04/24 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
python操作 hbase 数据的方法
2016/12/18 Python
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
学习python可以干什么
2019/02/26 Python
学习和使用python的13个理由
2019/07/30 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
青年教师典范事迹材料
2014/01/31 职场文书
母校寄语大全
2014/04/10 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
五一劳动节活动总结
2015/02/09 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
vue ref如何获取子组件属性值
2022/03/31 Vue.js
Python 全局空间和局部空间
2022/04/06 Python