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

