js 遞歸和定時器的實例解析
遞歸:是一個函數(shù)通過調(diào)用自身的情況下構(gòu)成的;
首先上個例子:
Function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }
這是一個經(jīng)典的遞歸階乘函數(shù),但是在js中這么調(diào)用可能會出現(xiàn)一些錯誤:例如如下代碼
var anotherFactorial = factorial; factorial = null; alert(anotherFactorial)// 出錯
以上代碼先把factorial()函數(shù)保存在變量anotherFactorial中,然后將factorial變量設(shè)置為null,結(jié)果指向原始函數(shù)的引用只剩下一個。但再接下來調(diào)用anotherFactioral()時候,由于必須執(zhí)行factorial函數(shù),而factoial已經(jīng)不再是函數(shù),所以就會導(dǎo)致錯誤,再這種情況下,使用arguments.callee可以解決這個問題。
arguments.callee是一個指向正在執(zhí)行的函數(shù)的指針,因此可以用來實現(xiàn)對函數(shù)的遞歸調(diào)用。
例如:
function factorial (num){ if(num){ return 1; }else{ return num*arguments.callee; } }
arguments.callee 優(yōu)點:
1、可以確保無論怎樣調(diào)用函數(shù)都不會出問題。因此編寫遞歸函數(shù)時候,使用argments.callee總比使用函數(shù)名更保險;
注意點:嚴格模式下無效,會報錯
嚴格模式下寫法:
var factorial = (function f(){ if(num<1){ return 1; }else{ return num*f(num-1); } })
二、與定時器的結(jié)合使用:
js是單線程語言,但他允許通過設(shè)置超時調(diào)用和間歇時間來調(diào)度代碼在特定的時刻執(zhí)行。前者是在指定的時間過后執(zhí)行代碼,而后者則是每隔指定的時間就執(zhí)行一次代碼。
參數(shù):要執(zhí)行的代碼 和 以 毫秒表示時間
//不建議傳字符串,傳遞字符串可能導(dǎo)致性能損失 setTimeout("alter('hello word')", 1000); //推薦方式 setTimeout(function(){ alter("Hello world"); },1000) setInterval(function(){ alter("Hello world"); },1000)
注意點:結(jié)束
超時調(diào)用的代碼都是在全局作用域執(zhí)行的,因此函數(shù)中this的值在非嚴格模式下指向window對象,在嚴格模式下是undefined;
實際應(yīng)用中:
使用超時調(diào)用來模擬間歇調(diào)用是一種最佳模式,在開發(fā)環(huán)境下,很少使用真正的間歇調(diào)用,原因是后一個間歇調(diào)用可能會在前一個間歇調(diào)用之間啟動。
var num = 0, max = 0; function incrrmentNumber{ num++; if(num < max){ setTimeout(incrrmentNumber,500); }else{ alert("Done"); } } setTimeout(incrrmentNumber,500);
如果像上面那樣使用超時調(diào)用,則可以避免這一點。所以不要使用間歇調(diào)用;
以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時也希望多多支持腳本之家!
相關(guān)文章
javascript實現(xiàn)瀑布流自適應(yīng)遇到的問題及解決方案
這篇文章主要介紹了javascript實現(xiàn)瀑布流自適應(yīng)遇到的問題及解決方案,需要的朋友可以參考下2015-01-01JS清除文本框內(nèi)容離開在恢復(fù)及鼠標離開文本框時觸發(fā)js的方法
多網(wǎng)站的需要填寫的文本框在默認狀態(tài)下都會給出一個默認的提示語言,當鼠標點擊此文本框的時候能夠?qū)⒗锩娴哪J文本清除,當刪除輸入的文本且焦點離開文本框的時候再將默認的文本寫入文本框2016-01-01JavaScript實現(xiàn)仿淘寶商品購買數(shù)量的增減效果
最近接了個項目,要開發(fā)一個地方的O2O租書項目,使用的是asp.net mvc技術(shù),其中咋圖書詳情頁,用戶可以輸入借閱的數(shù)量,器實現(xiàn)此功能的方法是使用了js來控制數(shù)量的增減和校驗,對js實現(xiàn)商品數(shù)量的增減功能感興趣的朋友一起學(xué)習(xí)吧2016-01-01