定時器(setTimeout/setInterval)調用帶參函數失效解決方案_javascript技巧

來源:互聯網
上載者:User
首先來看下定時器的用法
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()同樣適用,這裡就不在過多敘述了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.