精解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重要知识更新
Jul 08 Javascript
JavaScript框架(iframe)操作总结
Apr 16 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
Mar 25 Javascript
Bootstrap基础学习
Jun 16 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
Jun 21 Javascript
jquery将标签元素的高设为屏幕的百分比
Apr 19 jQuery
浅谈vue-lazyload实现的详细过程
Aug 22 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 Javascript
Vue多环境代理配置方法思路详解
Jun 21 Javascript
JavaScript实现轮播图特效
Apr 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
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
bootstrap手风琴制作方法详解
2017/01/11 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
基于js判断浏览器是否支持webGL
2020/04/18 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
python操作MongoDB基础知识
2013/11/01 Python
Python守护进程和脚本单例运行详解
2017/01/06 Python
python编写分类决策树的代码
2017/12/21 Python
Python3之读取连接过的网络并定位的方法
2018/04/22 Python
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
Python函数的参数常见分类与用法实例详解
2019/03/30 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Python生成rsa密钥对操作示例
2019/04/26 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
2019/11/25 Python
使用Python发现隐藏的wifi
2020/03/04 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
百思买美国官网:Best Buy
2016/07/28 全球购物
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
学生党员的自我评价范文
2014/03/01 职场文书
新品发布会策划方案
2014/06/08 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
男人帮观后感
2015/06/18 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
springboot中一些比较常用的注解总结
2021/06/11 Java/Android
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android