|
我們常用的使用場景是:
復(fù)制代碼 代碼如下:
window.setTimeout("delayRun()", n);
window.setInterval("intervalRun()", n);
window.setTimeout(delayRun, n);
window.setInterval(intervalRun, n);
顯然強行代參數(shù)的調(diào)用: window.setTimeout("delayRun(param)", n);
復(fù)制代碼 代碼如下:
window.setInterval("intervalRun(param)", n);
window.setTimeout(delayRun(param), n);
window.setInterval(intervalRun(param), n);
都是錯誤的,因為string literals形式的方法調(diào)用,param必須是全局變量(即window對象上的變量)才行;而function pointer形式的調(diào)用,完全錯誤了,這是把函數(shù)的返回值當(dāng)成了setTimeout/setInterval函數(shù)的參數(shù)了,完全不是我們所望的事情。
解決這個問題的辦法可以使用匿名函數(shù)包裝的方式,在以下scenario中我們這么做:
復(fù)制代碼 代碼如下:
function foo()
{
var param = 100;
window.setInterval(function()
{
intervalRun(param);
}, 888);
}
function interalRun(times)
{
// todo: depend on times parameter
}
這樣一來,就可以不再依賴于全局變量向delayRun/intervalRun函數(shù)中傳遞參數(shù),畢竟當(dāng)頁面中的全局變量多了以后,會給腳本的開發(fā)、調(diào)試和管理等帶來極大的puzzle。
JavaScript技術(shù):精解window.setTimeout()&window.setInterval()使用方式與參數(shù)傳遞問題!,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。