JavaScript進(jìn)階教程(第三課第二部分)第2/2頁
定時器的功能主要在于設(shè)定某個未來的時間,讓Javascript到時執(zhí)行某個語句:
var the_string = "hello";
the_timeout = setTimeout("alert(the_string);", 60000);
這兩行指令讓JavaScript等待一分鐘然后彈出一個提示框顯示the_string變量所包含的內(nèi)容。所以一分鐘后JavaScript就尋找叫做the_string的變量并調(diào)用alert()。但是問題是一分鐘后該變量中所包含的內(nèi)容可能是別的什么。所以如果你把這兩行代碼放在一個函數(shù)內(nèi),setTimeout有可能會報錯。例如在下例中:
function alertInAMinute()
{
var the_string = "hello";
the_timeout = setTimeout("alert(the_string);", 60000);
}
然后你在某個鏈接中調(diào)用這個函數(shù):
<a href="#" onClick="alertInAMinute(); return false;">blah!</a>
可能會出錯。因?yàn)槟愣x名為the_string的變量時用的是var,而當(dāng)你在一個函數(shù)內(nèi)使用var時,Javascript將其理解為該變量只存在于該函數(shù)中。一旦離開該函數(shù)而進(jìn)入另一個函數(shù)后,該變量就會從Javascript的內(nèi)存中消失。所以當(dāng)后來需要調(diào)用該變量時,Javascript從它的內(nèi)存中是不可能找到該變量的,錯誤因此就產(chǎn)生了。
產(chǎn)生問題的原因在于你將一個變量傳遞給setTimeout。你可以通過將變量的值而不是變量本身傳遞給setTime來避免這個問題:
function alertInAMinute()
{
var the_string = "hello";
the_timeout = setTimeout("alert('" + the_string + "');",60000);
}
這段代碼將變量the_string從setTimeout的引號中拉出來,由于該變量變量目前不在setTimeout的引號內(nèi),JavaScript就可以從內(nèi)存中找到該變量的值。
定時器在動態(tài)HTML中用途非常廣泛,所以值得你仔細(xì)研究它。
相關(guān)文章
以Python代碼實(shí)例展示kNN算法的實(shí)際運(yùn)用
這篇文章主要介紹了以Python代碼實(shí)例展示kNN算法的實(shí)際運(yùn)用,這里舉了一個用來預(yù)測豆瓣電影用戶的性別的例子,需要的朋友可以參考下2015-10-10
javaScript復(fù)制功能調(diào)用實(shí)現(xiàn)方案
說到使用js實(shí)現(xiàn)點(diǎn)擊復(fù)制的功能,我下面想說的方法也是和網(wǎng)上的大同小異的。js實(shí)現(xiàn)是很簡單,最難的是兼容問題,畢竟用IE以外的人還是有很多的2012-12-12
javascript數(shù)據(jù)代理與事件詳解分析
所謂數(shù)據(jù)代理(也叫數(shù)據(jù)劫持),指的是在訪問或者修改對象的某個屬性時,通過一段代碼攔截這個行為,進(jìn)行額外的操作或者修改返回結(jié)果。比較典型的是 Object.defineProperty() 和 ES2015 中新增的 Proxy 對象2021-11-11
javascript內(nèi)置對象arguments詳解
這篇文章主要介紹了javascript內(nèi)置對象arguments,實(shí)例講解arguments是什么怎么用,需要的朋友可以參考下2014-03-03
Javascript模塊化編程(一)模塊的寫法最佳實(shí)踐
Javascript模塊化編程,已經(jīng)成為一個迫切的需求。理想情況下,開發(fā)者只需要實(shí)現(xiàn)核心的業(yè)務(wù)邏輯,其他都可以加載別人已經(jīng)寫好的模塊但是,Javascript不是一種模塊化編程語言,它不支持類class,更遑論模塊module了2013-01-01
JavaScript Math.ceil 方法(對數(shù)值向上取整)
js Math.ceil用于對數(shù)值向上取整,即得到大于或等于該數(shù)值的最小整數(shù),需要的朋友可以參考下2015-01-01

