在使用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。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[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>
分享到:
相关推荐
`window.setTimeout()`和`window.setInterval()`是JavaScript中非常实用的两个API,它们可以用来实现各种基于时间的功能,如定时任务、倒计时等。正确理解和使用这两个API,可以帮助开发者更好地控制程序的执行流程...
在JavaScript的世界里,`window`对象是全局对象,它提供了与浏览器窗口进行交互的各种方法和属性。本篇文章将深入探讨`window.open()`、`window.opener`、`window.name`以及`window`对象的一些核心概念,同时通过两...
在JavaScript编程中,window对象下的setTimeout和setInterval是两个非常重要的定时器方法,它们能够让某些函数延迟执行或者每隔一段时间重复执行。但是,由于这两个方法运行在一个由脚本宿主模拟出来的Timer线程中,...
在JavaScript编程中,`setTimeout()`和`setInterval()`是两个非常关键的函数,它们用于实现异步编程,特别是在处理动画、定时任务或者延迟执行代码时不可或缺。这两个函数都是全局对象`window`的方法,它们的区别...
在 JavaScript 中,SetInterval 和 setTimeout 是两种常用的定时器函数,用于实现延迟执行或重复执行某些操作。下面我们将详细讲解这两种函数的区别和用法。 SetTimeout 函数 SetTimeout 函数用于延迟执行某个函数...
在 JavaScript 中,SetInterval 和 setTimeout 是两种常用的定时器函数,用于实现延迟执行或重复执行某些操作。本文将详细介绍这两种函数的用法和区别。 setTimeout 函数 setTimeout 函数用于延迟执行某个函数或...
JavaScript中的Window对象是全局对象,它是每个浏览器窗口的核心,提供了许多与浏览器窗口交互的方法和属性。这个对象在JavaScript中无处不在,因为它既是全局变量也是全局函数的容器。以下是Window对象的一些主要...
根据提供的文件信息,这是一篇关于JavaScript中的window对象及其方法的文档。window对象是Web浏览器中的一个全局对象,它代表了浏览器窗口本身,是JavaScript中的最顶级对象。以下是关于window对象及其相关方法的...
在JavaScript中,`Window`对象是所有浏览器窗口的基础。它是全局对象,也是顶级对象。对于初学者来说,了解`Window`对象的基本概念及其方法是非常重要的,这有助于更好地理解浏览器环境中的脚本执行流程。 #### 二...
在JavaScript中,`window`对象是最顶层的对象,几乎所有的全局变量、函数等都属于它。`window`对象提供了多种方法和属性,使得开发者能够更好地控制浏览器窗口的行为,实现丰富的交互效果。本文将详细介绍与`window`...
在JavaScript中,所有的全局变量和函数都是window对象的属性和方法。本篇将详细阐述window对象的一些常用方法及其作用。 1. **open方法** `window.open(URL, 窗口名称, 窗口风格)` 用于打开新的浏览器窗口。`URL`...
虽然我学习和应用javascript已经两年多了,但是对setTimeout方法,有时候也要查阅资料。今天对js的setTimeout方法做一个系统地总结。 setInterval与setTimeout的区别 说道setTimeout,很容易就会想到setInterval,...
4. **定时器**:`window.setTimeout()`和`window.clearTimeout()`用于设置和清除定时执行的函数,`window.setInterval()`和`window.clearInterval()`则用于周期性执行函数。 例如,以下代码会在5秒后弹出一个消息框...
浏览器对象模型(Browser Object Model,简称 BOM)是 JavaScript 中一个重要的概念,它提供了与浏览器窗口交互的方法和属性。通过 BOM,开发者可以控制浏览器窗口的行为,如改变窗口大小、位置,甚至创建新的窗口等...
Window对象在Web开发中扮演着至关重要的角色,它是JavaScript中全局对象的一个实例,几乎所有的其他JavaScript对象都是Window对象的后代。了解并熟练掌握Window对象的方法和属性,可以帮助开发者编写出性能更高、更...
以下将详细讲解JavaScript中与`window`对象和`document`对象相关的知识点。 **1. `window`对象:** `window`对象是JavaScript中的全局对象,代表了浏览器的一个窗口。它提供了许多方法和属性,如: - `window....
JavaScript是Web开发中不可或缺的一部分,尤其其核心对象如Window,对于网页交互起着至关重要的作用。Window对象是浏览器环境中JavaScript的全局对象,它代表了浏览器的一个窗口,是JavaScript与浏览器进行交互的...
Window对象在JavaScript中扮演着重要角色,它是全局对象,几乎所有的其他对象都是它的后代。它提供了许多用于控制浏览器窗口的功能,如打开、关闭、移动、调整大小、滚动以及与用户交互的方法。以下是对Window对象的...
本文将深入讲解JavaScript中的两个重要定时器函数:`setTimeout`和`setInterval`。 首先,`setTimeout`函数用于在指定延迟时间后执行一次函数或代码片段。其基本语法如下: ```javascript var timeoutID = window....
javascript 中的 setInterval 和 setTimeout 使用实例 在 javascript 中,有两个重要的定时执行函数,即 setInterval 和 setTimeout。这两个函数都可以用来执行某个函数或表达式,但它们之间有一些关键的区别。 ...