首先來看下定時器的用法
1. setInterval(code,millisec[,"lang"]) setInterval() 方法可按照指定的周期(以毫秒計)來調用函數或計算表達式。
參數 |
描述 |
code
必需,要調用的函數或要執行的代碼串。
millisec
必需,周期性執行或調用 code 之間的時間間隔,以毫秒計。
2.setTimeout(code,millisec) setTimeout() 方法用於在指定的毫秒數後調用函數或計算表達式。
參數 |
描述 |
code
必需,要調用的函數後要執行的 JavaScript 代碼串。
millisec
必需,在執行代碼前需等待的毫秒數。
提示:setTimeout() 只執行 code 一次。如果要多次調用,請使用 setInterval() 或者讓 code 自身再次調用 setTimeout()。
也許你曾碰到過這樣的問題,不管是setInterval()還是setTimeout(),當code參數裡放一個帶參函數時,定時器都會失效,看下面這個例子:
復制代碼 代碼如下:
function test(str){
alert(str);
}
var a = "abcde"
setTimeout(test(a),3000);
執行上面代碼,頁面不會延遲3秒調用test(a),而是會立即執行test(a),IE、FF、Chrome下都會出現這個問題,如果你經常用到定時器,這個問題應該應該經常會碰到,那麼要怎樣去解決呢?
筆者在這裡歸納兩種常用的解決方法,當然應該也還有其他的解決方法,在這裡就不一一贅述。
方法1:用匿名函數包裹
復制代碼 代碼如下:
function test(str){
alert(str);
}
var a = "abcde"
setTimeout(function(){
test(a);
},3000);
方法2:用引號包裹需調用的函數
復制代碼 代碼如下:
function test(str){
alert(str);
}
var a = "abcde"
setTimeout("test('+a+')",3000);
上面只以setTimeout()為例,setInterval()同樣適用,這裡就不在過多敘述了。