精解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移动div层-javascript 拖动层
Mar 22 Javascript
写给想学习Javascript的朋友一点学习经验小结
Nov 23 Javascript
javascript 弹出窗口中是否显示地址栏的实现代码
Apr 14 Javascript
js事件冒泡实例分享(已测试)
Apr 23 Javascript
jquery实现的图片点击滚动效果
Apr 29 Javascript
JavaScript中匿名函数用法实例
Mar 23 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
Oct 27 Javascript
jQuery+JSON实现AJAX二级联动实例分析
Dec 18 Javascript
数据结构中的各种排序方法小结(JS实现)
Jul 23 Javascript
微信小程序 教程之引用
Oct 18 Javascript
在vue组件中使用axios的方法
Mar 16 Javascript
Vue.js中的高级面试题及答案
Jan 13 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
array_multisort实现PHP多维数组排序示例讲解
2011/01/04 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
php生成圆角图片的方法
2015/04/07 PHP
PHP编程计算文件或数组中单词出现频率的方法
2017/05/22 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
用正则表达式 动态创建/增加css style script 兼容IE firefox
2009/03/10 Javascript
jquery multiSelect 多选下拉框
2010/07/09 Javascript
javascript跨域刷新实现代码
2011/01/01 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
jQuery中多个元素的Hover事件解决方案
2014/06/12 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
jQuery表单设置值的方法
2017/06/30 jQuery
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
python目录操作之python遍历文件夹后将结果存储为xml
2014/01/27 Python
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
详细解析Python中的变量的数据类型
2015/05/13 Python
Python实现翻转数组功能示例
2018/01/12 Python
python机器人行走步数问题的解决
2018/01/29 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
python实现超级玛丽游戏
2020/03/18 Python
Jupyter notebook无法导入第三方模块的解决方式
2020/04/15 Python
python 实现客户端与服务端的通信
2020/12/23 Python
自查自纠整改报告
2014/11/06 职场文书
新店开张宣传语
2015/07/13 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
基于Python实现对比Exce的工具
2022/04/07 Python