JavaScript遞歸操作實(shí)例淺析
本文實(shí)例分析了JavaScript遞歸操作。分享給大家供大家參考,具體如下:
問題
一個(gè)簡(jiǎn)單的遞歸,求n的階乘:
function factorial(n){ if (n<=1) { return 1; }else{ return factorial(n-1)*n; } }
如果像下面這樣使用它,則會(huì)出錯(cuò):
var fcopy = factorial; factorial = null; alert(fcopy(3));
因?yàn)閒copy指向的函數(shù)實(shí)體調(diào)用了factorial,而factorial已經(jīng)被釋放。
解決的辦法
使用arguments.callee
執(zhí)行流進(jìn)入函數(shù)時(shí)會(huì)創(chuàng)建函數(shù)的運(yùn)行環(huán)境(作用域鏈等),包括 arguments 這個(gè)特殊對(duì)象,arguments對(duì)象有個(gè)屬性指向函數(shù)本身:arguments.callee 。
function factorial(n){ if (n<=1) { return 1; }else{ return arguments.callee(n-1)*n; } }
不過callee在嚴(yán)格模式下不可用。
使用函數(shù)表達(dá)式
var factorial = (function f(n){ if (n<=1) { return 1; }else{ return f(n-1)*n; } })
這并非使用了什么新的技術(shù),只是在原來概念上的一種應(yīng)用,在定義 factorial 時(shí),直接創(chuàng)建一個(gè)函數(shù),再將此函數(shù)的引用賦值給factorial。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動(dòng)畫特效與技巧匯總》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
相關(guān)文章
JavaScript獲取對(duì)象在頁(yè)面中位置坐標(biāo)的方法
這篇文章主要介紹了JavaScript獲取對(duì)象在頁(yè)面中位置坐標(biāo)的方法,涉及JavaScript操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下2016-02-02微信小程序與公眾號(hào)實(shí)現(xiàn)數(shù)據(jù)互通的方法
這篇文章主要介紹了微信小程序與公眾號(hào)實(shí)現(xiàn)數(shù)據(jù)互通的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07基于JS實(shí)現(xiàn)頁(yè)面視頻video標(biāo)簽禁止下載(下載按鈕+右擊菜單)
最近做項(xiàng)目遇到這樣的需求,禁止用戶瀏覽頁(yè)面的時(shí)候下載頁(yè)面的視頻,網(wǎng)上看到下載視頻的方法有兩種,本文對(duì)每種方法做詳細(xì)分析,對(duì)js禁止下載視頻相關(guān)知識(shí)感興趣的朋友一起看看吧2024-02-02js實(shí)現(xiàn)無刷新監(jiān)聽URL的變化示例代碼詳解
這篇文章主要介紹了js如何無刷新監(jiān)聽URL的變化,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06通過微信公眾平臺(tái)獲取公眾號(hào)文章的方法示例
這篇文章主要介紹了通過微信公眾平臺(tái)獲取公眾號(hào)文章的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12js實(shí)現(xiàn)表單多按鈕提交action的處理方法
這篇文章主要介紹了js實(shí)現(xiàn)表單多按鈕提交action的處理方法,需要的朋友可以參考下2015-10-10JS+canvas畫布實(shí)現(xiàn)炫酷的旋轉(zhuǎn)星空效果示例
這篇文章主要介紹了JS+canvas畫布實(shí)現(xiàn)炫酷的旋轉(zhuǎn)星空效果,結(jié)合實(shí)例形式分析了js結(jié)合HTML5 canvas圖形繪制與數(shù)值計(jì)算相關(guān)操作技巧,需要的朋友可以參考下2019-02-02