setinterval参数 setinterval函数传参的使用
1
2
3
4
5
6
7
8
|
function a(s) { alert(s); } setInterval("a()",100); 我想传递一个参数过去,怎么弄? 这个参数有可能是变量有可能是常数。 |
setInterval是一个实现定时调用的函数,可按照指定的周期(以毫秒计)来调用函数或计算表达式。setInterval方法会不停地调用函数,直到 clearInterval被调用或窗口被关闭。
由setInterval返回的ID值可用作clearInterval方法的参数。
setInterval(function(){a("text")},100);
setInterval("a('"+obj+"')",100);
obj是变量不可以带单引号得
var obj=document.getElementById("mydiv");
setInterval(function{a(obj)},100);
其实提上对函数的调用均能执行。首先我们看以下代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">< html xmlns = "http://www.w3.org/1999/xhtml" > < head > < title ></ title > < script type = "text/javascript"> function fun(){ alert(1); } setInterval("fun()",1000); //全局作用域下正常执行 setInterval(fun(),1000); //调用函数正常,setInterval调用出错 setInterval(fun,1000); //正确 </ script > </ head > < body > </ body > </ html > |
我所给出的代码和提问题人是一样的,唯一的区别就是函数名不同罢了!如果大家做了相关测试都应该知道,就以上代码来说都会弹出结果1.
当然以上代码其执行环境为全局。setInterval 第一个参数 可以是函数名、匿名函数、函数的引用以及其他可执行代码。
1
|
setInterval( "fun()" ,1000); |
其中这种加引号的调用就可以理解为 可执行代码 就行eval 一样去执行第一个参数,就是对fun方法的调用 理所当然的弹出 1 一秒钟间隔,一直执行。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
|
setInterval(fun(),1000); |
而这个调用我就不理解使用者通过这种方式使用setInterval 的意图为何.
fun() 是对函数的直接调用,也就是说当setInterval还没有开始函数func就执行了。如果这个函数没有返回值或者返回值不是可执行的函数或者其他的代码的话,就以上代码而言只是弹出1,之后就遍报错了.
难道这样的调用真的不可以吗?其实是可以的!例如代码:
1
2
3
4
5
6
|
function funone() { return function () { alert( "qishiwoyenengzhixing" ) } } setInterval(funone(), 1000); //你敢说我不能执行? |
我个人认为这种设计或者调用完全没有任何意义,用其他的方法就行了。
--------------------------------------------------------------------------------------------------------------
1
|
setInterval(fun,1000); //这种方法是正确的。 |
大家可以把这种调用setInterval的第一个参数看作参数为 函数名或函数的引用。当然我们还可以这样调用,使用匿名函数。
1
2
3
4
|
setInterval( function () { alert( "我一秒中执行一次" ); }, 1000) |
---------------------------------------------------------------------------------------------------------------
有些人可能发现,在全局作用域下 setInterval("fun()",1000); 可以正常执行,但放到window.onload函数中却不能执行。为什么呢?
先请看代码:
1
2
3
4
5
6
7
8
9
|
window.onload = function () { function fun() { alert(1); } setInterval( "fun()" ,1000); //这个报错了 未定义 重点在这一个 // setInterval(fun(), 3000); //这个和刚才全局的表现一样 // setInterval(fun,1000);//这个没有问题 } |
setInterval("fun()",1000); 这种调用报未定义,在全局我们已经说过了 。我们可以把带引号的参数理解为 可执行代码 。
而setInterval现在把以引号包括的可执行代码进行处理。就像eval一样给予执行。其在执行中 fun() 执行环境发生了变化,不是在window.onload方法下,而是在全局环境中也就是window.大家应该知道JavaScript存在作用域链,由内向外依次查找。内部可以访问其上层的函数和变量,而外部却不能访问内部的函数和变量。JavaScript有一个预编译处理,首先对函数和变量进行预编译。也就是说其函数和变量作用域是在其声明的时候确定的,而不是在执行的时候确定。当setInterval把"fun()"执行环境换为全局(详细见:拓展)的后,对fun的调用是无效的。因为全局不能访问局部的函数和变量。window.onload相对于window来说就是局部的。
setInterval函数参数
- codes -- 代码段的字符串表示(与eval函数的参数相同),或者是匿名函数、函数名
- interval -- 间隔的毫秒数
setInterval函数返回值
setInterval函数的ID标识,每次调用setInterval函数都会产生一个唯一的ID,可以通过clearInterval函数(此函数的参数接收一个setInterval返回的ID)暂停setInterval函数
setInterval函数说明
setInterval函数会重复间隔一段时间执行代码,因此应使用clearInterval函数将其停止,或者页面被卸载也会自动停止
示例
var
icolor
=
0
;
var
iNum
=
256
;
var
iID
=
setInterval
(
setbgColor
,
500
)
;
function
setbgColor
(
)
{
document
.
bgColor
=
"
#
"
+
icolor
*
iNum
*
iNum
*
iNum
+
icolor
*
iNum
*
iNum
+
icolor
*
iNum
;
if
(
(
icolor
+=
10
)
>
iNum
)
{
clearInterval
(
iID
)
;
}
}
JavaScript的setInterval()
函数用于设定每隔指定的时间就执行对应的函数或代码。
该函数属于全局对象window
。
语法
setInterval()
函数的语法如下:
<span class="pln">setInterval </span><span class="pun">(</span><span class="pln"> code</span><span class="pun">,</span><span class="pln"> milliseconds</span><span class="pun">[,</span><span class="pln"> args</span><span class="pun">...]</span> <span class="pun">)</span>
参数
参数 | 描述 |
code | 需要执行的函数或js代码 |
milliseconds | 执行函数或代码的间隔时间,单位为毫秒 |
args | 可选参数用于给被调用的函数传递参数,参数可以有多个 |
返回值
setInterval()
函数将返回一个标识符 ID,这个 ID 是唯一的(一般是整数,从 1 开始,每调用一次 setInterval() 就加 1)。
如果需要 setInterval() 执行的函数或代码尚未执行,我们可以通过 clearInterval() 函数来取消该执行操作,clearInterval() 需要接收一个参数,这个参数就是 setInterval() 返回的标识符ID。
示例&说明
setInterval() 的参数code
可以直接是一段js脚本。
<span class="com">// 每隔5秒钟就弹出提示信息"欢迎来到CodePlayer"。</span><span class="pln"> setInterval</span><span class="pun">(</span><span class="str">'alert("欢迎来到CodePlayer");'</span><span class="pun">,</span> <span class="lit">5000</span><span class="pun">);</span>
运行代码
参数code
也可以是一个函数调用。
<span class="kwd">function</span><span class="pln"> sayHi</span><span class="pun">(</span><span class="pln">msg</span><span class="pun">){</span><span class="pln"> alert</span><span class="pun">(</span><span class="pln">msg</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="com">// 每隔5秒钟就弹出提示信息"欢迎来到CodePlayer"。</span><span class="pln"> setInterval</span><span class="pun">(</span><span class="str">'sayHi("欢迎来到CodePlayer");'</span><span class="pun">,</span> <span class="lit">5000</span><span class="pun">);</span>
如果参数code
执行的是一个函数则可以直接使用函数名称或者匿名函数作为参数。如果函数需要参数,我们可以通过setInterval()
的可选参数为其传递相应的参数。
<span class="com">//该函数不需要参数</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> test</span><span class="pun">(){</span><span class="pln"> alert</span><span class="pun">(</span><span class="str">"测试"</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="com">// 每隔5秒钟就弹出提示信息"测试"。</span><span class="pln"> setInterval</span><span class="pun">(</span><span class="pln">test</span><span class="pun">,</span> <span class="lit">5000</span><span class="pun">);</span><span class="pln"> </span><span class="com">// 使用匿名函数作为参数,每隔5秒钟就输出控制台信息"测试2"。</span><span class="pln"> setTimeout</span><span class="pun">(</span><span class="kwd">function</span><span class="pun">(){</span><span class="pln"> console </span><span class="pun">&&</span><span class="pln"> console</span><span class="pun">.</span><span class="pln">log</span><span class="pun">(</span><span class="str">"测试2"</span><span class="pun">);</span><span class="pln"> </span><span class="pun">},</span> <span class="lit">5000</span><span class="pun">);</span><span class="pln"> </span><span class="com">// 该函数需要两个参数</span><span class="pln"> </span><span class="kwd">function</span><span class="pln"> sayHello</span><span class="pun">(</span><span class="pln">name</span><span class="pun">,</span><span class="pln"> age</span><span class="pun">){</span><span class="pln"> alert</span><span class="pun">(</span><span class="str">"我叫"</span> <span class="pun">+</span><span class="pln"> name </span><span class="pun">+</span> <span class="str">",今年"</span> <span class="pun">+</span><span class="pln"> age </span><span class="pun">+</span> <span class="str">"岁!"</span><span class="pun">);</span><span class="pln"> </span><span class="pun">}</span><span class="pln"> </span><span class="com">//每隔5秒钟就弹出提示信息"我叫CodePlayer,今年18岁!"。</span><span class="pln"> setInterval</span><span class="pun">(</span><span class="pln">sayHello</span><span class="pun">,</span> <span class="lit">5000</span><span class="pun">,</span> <span class="str">"CodePlayer"</span><span class="pun">,</span> <span class="lit">18</span><span class="pun">);</span>
1,HTML DOM setInterval() 方法
定义和用法
setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
语法
setInterval(code,millisec[,"lang"])
参数 | 描述 |
---|---|
code | 必需。要调用的函数或要执行的代码串。 |
millisec | 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。 |
返回值
一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。
---------------------------------------------------
2,HTML DOM clearInterval() 方法
定义和用法
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
语法
clearInterval(id_of_setinterval)
参数 | 描述 |
---|---|
id_of_setinterval | 由 setInterval() 返回的 ID 值。 |
如何停止:
下面这个例子将每隔 50 毫秒调用 clock() 函数。您也可以使用一个按钮来停止这个 clock:
<html>
<body>
<input type="text" id="clock" size="35" />
<script language=javascript>
var int=self.setInterval("clock()",50)
function clock()
{
var t=new Date()
document.getElementById("clock").value=t
}
</script>
</form>
<button onclick="int=window.clearInterval(int)">
Stop interval</button>
</body>
</html>
--------------------------------------------------------------------------------------------------------
再来了解 setTimeout :
1,HTML DOM setTimeout() 方法
定义和用法
setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式。
语法
setTimeout(code,millisec)
参数 | 描述 |
---|---|
code | 必需。要调用的函数后要执行的 JavaScript 代码串。 |
millisec | 必需。在执行代码前需等待的毫秒数。 |
提示和注释
提示:setTimeout() 只执行 code 一次。如果要多次调用,请使用 setInterval() 或者让 code 自身再次调用 setTimeout()。
实例,这个例子,在你点击按钮 5 秒钟后会弹出一个提示框:
<html> <head> <script type="text/javascript"> function timedMsg() { var t=setTimeout("alert('5 seconds!')",5000) } </script> </head> <body> <form> <input type="button" value="Display timed alertbox!" onClick="timedMsg()"> </form> <p>Click on the button above. An alert box will be displayed after 5 seconds.</p> </body> </html>
-----------------------------
2,HTML DOM clearTimeout() 方法
定义和用法
clearTimeout() 方法可取消由 setTimeout() 方法设置的 timeout。
语法
clearTimeout(id_of_settimeout)
参数 | 描述 |
---|---|
id_of_setinterval | 由 setTimeout() 返回的 ID 值。该值标识要取消的延迟执行代码块。 |
实例
下面的例子每秒调用一次 timedCount() 函数。您也可以使用一个按钮来终止这个定时消息:
<html>
<head>
<script type="text/javascript">
var c=0
var t
function timedCount()
{
document.getElementById('txt').value=c
c=c+1
t=setTimeout("timedCount()",1000)
}
function stopCount()
{
clearTimeout(t)
}
</script>
</head>
<body>
<form>
<input type="button" value="Start count!" onClick="timedCount()">
<input type="text" id="txt">
<input type="button" value="Stop count!" onClick="stopCount()">
</form>
</body>
</html>
0 Comments.