精解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 相关文章推荐
从阿里妈妈发现的几个不错的表单验证函数
Sep 21 Javascript
JavaScript 类似flash效果的立体图片浏览器
Feb 08 Javascript
JQuery学习笔录 简单的JQuery
Apr 09 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
Feb 13 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
Sep 16 Javascript
jQuery Validate验证框架经典大全
Sep 23 Javascript
跟我学习javascript的this关键字
May 28 Javascript
bootstrap实现每隔5秒自动轮播效果
Dec 20 Javascript
jQuery自定义插件详解及实例代码
Dec 29 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
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
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
Git命令之分支详解
2021/03/02 PHP
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
Angularjs+bootstrap+table多选(全选)支持单击行选中实现编辑、删除功能
2017/03/27 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
js中关于Blob对象的介绍与使用
2019/11/29 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
小程序选项卡以及swiper套用(跨页面)
2020/06/19 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
让python json encode datetime类型
2010/12/28 Python
使用python开发vim插件及心得分享
2014/11/04 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
pycharm全局搜索的具体步骤
2020/07/28 Python
CSS3 中filter(滤镜)属性使用详解
2020/04/07 HTML / CSS
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
Agoda西班牙:全球特价酒店预订
2017/06/03 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
杭州联环马网络笔试题面试题
2013/08/04 面试题
市场营销专业个人求职信范文
2013/12/14 职场文书
工作疏忽检讨书
2014/01/25 职场文书
工程售后服务承诺书
2014/05/21 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
2014审计局领导班子民主生活会对照检查材料思想汇报
2014/09/20 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
执行力心得体会范文
2016/01/11 职场文书
优秀家长事迹材料(2016推荐版)
2016/02/29 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang