精解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 相关文章推荐
prototype 的说明 js类
Sep 07 Javascript
jqPlot 基于jquery的画图插件
Apr 26 Javascript
javascript日期转换 时间戳转日期格式
Nov 05 Javascript
用js实现trim()的解决办法
Apr 16 Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
js实现微博发布小功能
Jan 12 Javascript
深入理解Node中的buffer模块
Jun 03 Javascript
vue-prop父组件向子组件进行传值的方法
Mar 01 Javascript
详解原生JS动态添加和删除类
Mar 26 Javascript
JavaScript实现alert弹框效果
Nov 19 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来计算某个目录大小的方法
2014/04/01 PHP
php利用事务处理转账问题
2015/04/22 PHP
jQuery Clone Bug解决代码
2010/12/22 Javascript
ExtJs的Date格式字符代码
2010/12/30 Javascript
js、css、img等浏览器缓存问题的2种解决方案
2013/10/23 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
js HTML5手机刮刮乐代码
2020/09/29 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
Vue.js实例方法之生命周期详解
2017/07/03 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
python分割和拼接字符串
2013/11/01 Python
python破解zip加密文件的方法
2018/05/31 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
python模块常用用法实例详解
2019/10/17 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
会计专业应届生求职信
2013/11/24 职场文书
工程负责人任命书
2014/06/06 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android