setinterval參數(shù) setinterval函數(shù)傳參的使用
1
2
3
4
5
6
7
8
|
function?a(s) { ??? alert(s); } setInterval("a()",100); 我想傳遞一個參數(shù)過去,怎么弄? 這個參數(shù)有可能是變量有可能是常數(shù)。 |
setInterval是一個實現(xiàn)定時調用的函數(shù),可按照指定的周期(以毫秒計)來調用函數(shù)或計算表達式。setInterval方法會不停地調用函數(shù),直到 clearInterval被調用或窗口被關閉。
由setInterval返回的ID值可用作clearInterval方法的參數(shù)。
setInterval(function(){a("text")},100);
setInterval("a('"+obj+"')",100);
obj是變量不可以帶單引號得
var?obj=document.getElementById("mydiv");
setInterval(function{a(obj)},100);
其實提上對函數(shù)的調用均能執(zhí)行。首先我們看以下代碼
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); //全局作用域下正常執(zhí)行 ?????? setInterval(fun(),1000); //調用函數(shù)正常,setInterval調用出錯 ?????? setInterval(fun,1000);? //正確 ???? </ script > </ head > < body > </ body > </ html > |
? ? 我所給出的代碼和提問題人是一樣的,唯一的區(qū)別就是函數(shù)名不同罷了!如果大家做了相關測試都應該知道,就以上代碼來說都會彈出結果1.
當然以上代碼其執(zhí)行環(huán)境為全局。setInterval 第一個參數(shù) 可以是函數(shù)名、匿名函數(shù)、函數(shù)的引用以及其他可執(zhí)行代碼。
1
|
setInterval( "fun()" ,1000); |
其中這種加引號的調用就可以理解為 可執(zhí)行代碼??就行eval 一樣去執(zhí)行第一個參數(shù),就是對fun方法的調用 理所當然的彈出 1??一秒鐘間隔,一直執(zhí)行。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1
|
setInterval(fun(),1000); |
而這個調用我就不理解使用者通過這種方式使用setInterval 的意圖為何.
fun() 是對函數(shù)的直接調用,也就是說當setInterval還沒有開始函數(shù)func就執(zhí)行了。如果這個函數(shù)沒有返回值或者返回值不是可執(zhí)行的函數(shù)或者其他的代碼的話,就以上代碼而言只是彈出1,之后就遍報錯了.
難道這樣的調用真的不可以嗎?其實是可以的!例如代碼:
1
2
3
4
5
6
|
?????? function funone() { ?????????? return function () { ???????????? alert( "qishiwoyenengzhixing" ) ?????????? } ?????? } setInterval(funone(), 1000); //你敢說我不能執(zhí)行? |
我個人認為這種設計或者調用完全沒有任何意義,用其他的方法就行了。
--------------------------------------------------------------------------------------------------------------
1
|
setInterval(fun,1000); //這種方法是正確的。 |
大家可以把這種調用setInterval的第一個參數(shù)看作參數(shù)為 函數(shù)名或函數(shù)的引用。當然我們還可以這樣調用,使用匿名函數(shù)。
1
2
3
4
|
setInterval( function () { ???????????? alert( "我一秒中執(zhí)行一次" ); ???????? }, 1000) |
---------------------------------------------------------------------------------------------------------------
有些人可能發(fā)現(xiàn),在全局作用域下??setInterval("fun()",1000); 可以正常執(zhí)行,但放到window.onload函數(shù)中卻不能執(zhí)行。為什么呢?
先請看代碼:
1
2
3
4
5
6
7
8
9
|
window.onload = function () { ???????????? function fun() { ???????????????? alert(1); ???????????? } ????????????? setInterval( "fun()" ,1000); //這個報錯了 未定義?? 重點在這一個 ???????????? // setInterval(fun(), 3000); //這個和剛才全局的表現(xiàn)一樣 ??????????? // setInterval(fun,1000);//這個沒有問題 ???????? } |
setInterval("fun()",1000); 這種調用報未定義,在全局我們已經(jīng)說過了 。我們可以把帶引號的參數(shù)理解為 可執(zhí)行代碼 。
而setInterval現(xiàn)在把以引號包括的可執(zhí)行代碼進行處理。就像eval一樣給予執(zhí)行。其在執(zhí)行中 fun() 執(zhí)行環(huán)境發(fā)生了變化,不是在window.onload方法下,而是在全局環(huán)境中也就是window.大家應該知道JavaScript存在作用域鏈,由內向外依次查找。內部可以訪問其上層的函數(shù)和變量,而外部卻不能訪問內部的函數(shù)和變量。JavaScript有一個預編譯處理,首先對函數(shù)和變量進行預編譯。也就是說其函數(shù)和變量作用域是在其聲明的時候確定的,而不是在執(zhí)行的時候確定。當setInterval把"fun()"執(zhí)行環(huán)境換為全局(詳細見:拓展)的后,對fun的調用是無效的。因為全局不能訪問局部的函數(shù)和變量。window.onload相對于window來說就是局部的。
setInterval函數(shù)參數(shù)
- codes -- 代碼段的字符串表示(與eval函數(shù)的參數(shù)相同),或者是匿名函數(shù)、函數(shù)名
- interval -- 間隔的毫秒數(shù)
setInterval函數(shù)返回值
setInterval函數(shù)的ID標識,每次調用setInterval函數(shù)都會產生一個唯一的ID,可以通過clearInterval函數(shù)(此函數(shù)的參數(shù)接收一個setInterval返回的ID)暫停setInterval函數(shù)
setInterval函數(shù)說明
setInterval函數(shù)會重復間隔一段時間執(zhí)行代碼,因此應使用clearInterval函數(shù)將其停止,或者頁面被卸載也會自動停止
示例
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()
函數(shù)用于設定每隔指定的時間就執(zhí)行對應的函數(shù)或代碼。
該函數(shù)屬于全局對象window
。
語法
setInterval()
函數(shù)的語法如下:
<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>
參數(shù)
參數(shù) | 描述 |
code | 需要執(zhí)行的函數(shù)或js代碼 |
milliseconds | 執(zhí)行函數(shù)或代碼的間隔時間,單位為毫秒 |
args | 可選參數(shù)用于給被調用的函數(shù)傳遞參數(shù),參數(shù)可以有多個 |
返回值
setInterval()
函數(shù)將返回一個標識符 ID,這個 ID 是唯一的(一般是整數(shù),從 1 開始,每調用一次 setInterval() 就加 1)。
如果需要 setInterval() 執(zhí)行的函數(shù)或代碼尚未執(zhí)行,我們可以通過 clearInterval() 函數(shù)來取消該執(zhí)行操作,clearInterval() 需要接收一個參數(shù),這個參數(shù)就是 setInterval() 返回的標識符ID。
示例&說明
setInterval() 的參數(shù)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>
運行代碼
參數(shù)code
也可以是一個函數(shù)調用。
<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>
如果參數(shù)code
執(zhí)行的是一個函數(shù)則可以直接使用函數(shù)名稱或者匿名函數(shù)作為參數(shù)。如果函數(shù)需要參數(shù),我們可以通過setInterval()
的可選參數(shù)為其傳遞相應的參數(shù)。
<span class="com">//該函數(shù)不需要參數(shù)</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">// 使用匿名函數(shù)作為參數(shù),每隔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">// 該函數(shù)需要兩個參數(shù)</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() 方法可按照指定的周期(以毫秒計)來調用函數(shù)或計算表達式。
setInterval() 方法會不停地調用函數(shù),直到 clearInterval() 被調用或窗口被關閉。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數(shù)。
語法
setInterval(code,millisec[,"lang"])
參數(shù) | 描述 |
---|---|
code | 必需。要調用的函數(shù)或要執(zhí)行的代碼串。 |
millisec | 必須。周期性執(zhí)行或調用 code 之間的時間間隔,以毫秒計。 |
返回值
一個可以傳遞給 Window.clearInterval() 從而取消對 code 的周期性執(zhí)行的值。
---------------------------------------------------
2,HTML DOM clearInterval() 方法
定義和用法
clearInterval() 方法可取消由 setInterval() 設置的 timeout。
clearInterval() 方法的參數(shù)必須是由 setInterval() 返回的 ID 值。
語法
clearInterval(id_of_setinterval)
參數(shù) | 描述 |
---|---|
id_of_setinterval | 由 setInterval() 返回的 ID 值。 |
如何停止:
下面這個例子將每隔 50 毫秒調用 clock() 函數(shù)。您也可以使用一個按鈕來停止這個 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() 方法用于在指定的毫秒數(shù)后調用函數(shù)或計算表達式。
語法
setTimeout(code,millisec)
參數(shù) | 描述 |
---|---|
code | 必需。要調用的函數(shù)后要執(zhí)行的 JavaScript 代碼串。 |
millisec | 必需。在執(zhí)行代碼前需等待的毫秒數(shù)。 |
提示和注釋
提示:setTimeout() 只執(zhí)行 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)
參數(shù) | 描述 |
---|---|
id_of_setinterval | 由 setTimeout() 返回的 ID 值。該值標識要取消的延遲執(zhí)行代碼塊。 |
實例
下面的例子每秒調用一次 timedCount() 函數(shù)。您也可以使用一個按鈕來終止這個定時消息:
<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.