[setTimeout]
setTimeout(表达式,延时时间)
在执行时,是在载入后延迟指定时间后,去执行一次表达式,记住,次数是一次
用setTimeout实现的自动变化显示随机数的效果:
<html>
<head>
<script>
window.onload=sett;
function sett()
{
document.body.innerHTML=Math.random();
setTimeout("sett()",500);
}
</script>
</head>
<body>
</body>
</html>
[setInterval]
setInterval(表达式,交互时间)
则不一样,它从载入后,每隔指定的时间就执行一次表达式
用setInterval实现的自动变化显示随机数的效果:
<html>
<head>
<script>
function sett()
{
document.body.innerHTML=Math.random();
}
setInterval("sett();", 500);
</script>
</script>
</head>
<body>
</body>
</html>
在使用JScript的时候,我们有时需要间隔的执行一个方法,比如用来产生网页UI动画特效啥的。这是我们常常会使用方法setInterval或 setTimeout,但是由于这两个方法是由脚本宿主模拟出来的Timer线程,在通过其调用我们的方法是不能为其传递参数。
我们常用的使用场景是:
Javascript代码
window.setTimeout("delayRun()", n);
window.setInterval("intervalRun()", n);
window.setTimeout(delayRun, n);
window.setInterval(intervalRun, n);
window.setTimeout("delayRun()", n);
window.setInterval("intervalRun()", n);
window.setTimeout(delayRun, n);
window.setInterval(intervalRun, n);
显然强行代参数的调用: window.setTimeout("delayRun(param)", n);
Javascript代码
window.setInterval("intervalRun(param)", n);
window.setTimeout(delayRun(param), n);
window.setInterval(intervalRun(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中我们这么做:
Javascript代码
function foo()
{
var param = 100;
window.setInterval(function()
{
intervalRun(param);
}, 888);
}
function interalRun(times)
{
// todo: depend on times parameter
}
function foo()
{
var param = 100;
window.setInterval(function()
{
intervalRun(param);
}, 888);
}
function interalRun(times)
{
// todo: depend on times parameter
}
这样一来,就可以不再依赖于全局变量向delayRun/intervalRun函数中传递参数,毕竟当页面中的全局变量多了以后,会给脚本的开发、调试和管理等带来极大的puzzle。
分享到:
相关推荐
我们常用的使用场景是: 代码如下:window.setTimeout(“delayRun()”, n); window.setInterval(“intervalRun()”, n); window.setTimeout(delayRun, n); window.setInterval(intervalRun, n);
本文将详细讲解window.setTimeout()和window.setInterval()的使用方式,并着重分析在不同场景下的参数传递问题。 首先,我们来看setTimeout和setInterval的基本用法。setTimeout方法用于将某个函数推迟执行一定的...
实战OpenGL三维可视化系统开发与源码精解+....pdf
2001年考研英语真题答案及精解..pdf
VC—关键技术精解原码.zip
技术指标精解大全.doc
《设计模式精解》.pdf
股票技术指标精解大全.doc
[ASP动态网站:68个典型模块精解].何国民等.扫描版.pdf
经典书籍 《C++builder6编程实例精解》.pdf
文件标题是“《JavaScript编程精解》.pdf”,描述中提到了“JavaScript 编程精解 中文第一版”,而标签同样为“JavaScript 编程精解”。部分内容重复提及了访问“稀酷客”网站的链接,这可能是出版商提供的额外资源...
《Visual C++编程精选集锦 关键技术精解分册》是一本专注于C++编程语言在Visual Studio环境下的实践指南。Visual C++是Microsoft开发的一个强大的集成开发环境,它不仅支持标准C++,还提供了对Microsoft特有的MFC...
股票21个技术指标精解大全.doc
不过,根据文件标题《Qt及Qt Quick开发实战精解.pdf》和标签“qt”,我们可以推测文档应该是关于Qt框架及其子框架Qt Quick的开发教程或者指南。 Qt是一个跨平台的C++应用程序框架,广泛用于开发图形用户界面(GUI)...
二次函数经典难题(含精解).doc
一个完整的薪资系统设计(附案例精解).doc
Cocos2D-X游戏开发技术精解学习.pdf )
Handler、Looper和Message:用于线程间的通信,解决Android UI线程与工作线程的数据交互问题。\n\n四、数据存储\n1. SharedPreferences:轻量级的键值对存储,适用于保存应用设置等简单数据。\n2. SQLite数据库:...