精解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 valueOf 使用方法
Dec 28 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
Jun 15 Javascript
js文件包含的几种方式介绍
Sep 28 Javascript
详解JavaScript中的blink()方法的使用
Jun 08 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
整理Javascript事件响应学习笔记
Dec 02 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
Mar 13 Javascript
js实现方块上下左右移动效果
Aug 17 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
Mar 01 Javascript
vue中v-for加载本地静态图片方法
Mar 03 Javascript
基于Vue+element-ui 的Table二次封装的实现
Jul 20 Javascript
微信小程序基于高德地图查找位置并显示文字
Oct 30 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
使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT
2011/04/23 PHP
深入理解require与require_once与include以及include_once的区别
2013/06/05 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
js的逻辑运算符 ||
2010/05/31 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
layui获取选中行数据的实例讲解
2018/08/19 Javascript
关于NodeJS中的循环引用详解
2019/07/23 NodeJs
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
深入剖析Python的爬虫框架Scrapy的结构与运作流程
2016/01/20 Python
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Django框架用户注销功能实现方法分析
2019/05/28 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
python 贪心算法的实现
2020/09/18 Python
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
土木工程毕业生推荐信
2013/10/28 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
科学发展观演讲稿
2014/09/11 职场文书
2014年减负工作总结
2014/12/10 职场文书
趣味运动会开幕词
2015/01/28 职场文书
继续教育个人总结
2015/03/03 职场文书
材料员岗位职责范本
2015/04/11 职场文书
春晚观后感
2015/06/11 职场文书
大学生暑期实践报告
2015/07/13 职场文书