精解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的闭包
Dec 31 Javascript
html超链接打开窗口大小的方法
Mar 05 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
jquery获取input type=text中的值的各种方式(总结)
Dec 02 Javascript
Javascript 制作图形验证码实例详解
Dec 22 Javascript
React学习笔记之条件渲染(一)
Jul 02 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
Aug 17 Javascript
Angular客户端请求Rest服务跨域问题的解决方法
Sep 19 Javascript
js实现简易计算器功能
Oct 18 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
JavaScript实现简单的音乐播放器
Aug 14 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截取utf-8中文字符串乱码的解决方法
2010/03/29 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php读取csv文件并输出的方法
2015/03/14 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python3.6正式版新特性预览
2016/12/15 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
Django数据库迁移常见使用方法
2020/11/12 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
Fossil美国官网:化石手表、手袋、首饰及配饰
2019/02/17 全球购物
若干个Java基础面试题
2015/05/19 面试题
工业设计专业推荐信
2013/10/29 职场文书
资产经营总监岗位职责范文
2013/12/01 职场文书
股指期货心得体会
2014/09/13 职场文书
房产协议书范本
2014/10/18 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS