精解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 相关文章推荐
写的htc的数据表格
Jan 20 Javascript
JS实现随机乱撞彩色圆球特效的方法
May 05 Javascript
解决JS无法调用Controller问题的方法
Dec 31 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
May 26 Javascript
js获取腾讯视频ID的方法
Oct 03 Javascript
浅析上传头像示例及其注意事项
Dec 14 Javascript
jQuery Validate插件自定义验证规则的方法
Dec 27 Javascript
javascript 中事件冒泡和事件捕获机制的详解
Sep 01 Javascript
限时抢购-倒计时的完整实例(分享)
Sep 17 Javascript
jquery实现楼层滚动效果
Jan 01 jQuery
微信小程序自定义键盘 内部虚拟支付
Dec 20 Javascript
js实现旋转木马轮播图效果
Jan 10 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
Terran热键控制
2020/03/14 星际争霸
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
常见php数据文件缓存类汇总
2014/12/05 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
jQuery each()小议
2010/03/18 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
2010/08/01 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
Vue中props的使用详解
2018/06/15 Javascript
从0到1构建vueSSR项目之路由的构建
2019/03/07 Javascript
[01:51]DAC趣味视频-如何成为职业选手.mp4
2017/04/02 DOTA
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
详解python eval函数的妙用
2017/11/16 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
Python3分析处理声音数据的例子
2019/08/27 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
2020/03/17 HTML / CSS
师范生个人推荐信
2013/11/29 职场文书
外语系毕业生自荐信范文
2013/12/16 职场文书
煤矿机修工岗位职责
2014/02/07 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
党校学习个人总结
2015/02/15 职场文书
廉政承诺书2015
2015/04/28 职场文书
竞聘书的秘诀
2019/04/02 职场文书