精解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 相关文章推荐
jquery DOM操作 基于命令改变页面
May 06 Javascript
A标签中通过href和onclick传递的this对象实现思路
Apr 19 Javascript
JavaScript按值删除数组元素的方法
Apr 24 Javascript
javascript this详细介绍
Sep 19 Javascript
Javascript json object 与string 相互转换的简单实现
Sep 27 Javascript
AngularJS 应用身份认证的技巧总结
Nov 07 Javascript
Angular2中如何使用ngx-translate进行国际化
May 21 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
浅谈JS中的常用选择器及属性、方法的调用
Jul 28 Javascript
element-ui 中使用upload多文件上传只请求一次接口
Jul 19 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
Nov 12 Javascript
js实现九宫格抽奖
Mar 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
一个用于mysql的数据库抽象层函数库
2006/10/09 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
php 函数中使用static的说明
2012/06/01 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
nodejs后台集成ueditor富文本编辑器的实例
2017/07/11 NodeJs
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
微信小程序实现滑动切换自定义页码的方法分析
2018/12/29 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
layui.tree组件的使用以及搜索节点功能的实现
2019/09/26 Javascript
python中通过预先编译正则表达式提高效率
2017/09/25 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
python使用if语句实现一个猜拳游戏详解
2019/08/27 Python
python和php哪个容易学
2020/06/19 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
领班岗位职责范文
2014/02/06 职场文书
班级安全教育实施方案
2014/02/23 职场文书
2014年超市工作总结
2014/11/19 职场文书
2015年校长新年寄语
2014/12/08 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang
Anaconda配置各版本Pytorch的实现
2021/08/07 Python