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"><htmlxmlns="http://www.w3.org/1999/xhtml"><head>????<title></title>????<scripttype="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
|
??????functionfunone() {??????????returnfunction() {????????????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() {????????????functionfun() {????????????????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函數將其停止,或者頁面被卸載也會自動停止
示例
varicolor=0;variNum=256;variID=setInterval(setbgColor,500);functionsetbgColor(){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.