欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js中遞歸函數(shù)的使用介紹

 更新時間:2012年10月25日 01:15:24   作者:  
所謂的遞歸函數(shù)就是在函數(shù)體內(nèi)調(diào)用本函數(shù)。使用遞歸函數(shù)一定要注意,處理不當(dāng)就會進入死循環(huán)。遞歸函數(shù)只有在特定的情況下使用 ,比如階乘問題
下面我們就做一個10以內(nèi)的階乘試試看吧:

[Ctrl+A 全選 注:引入外部Js需再刷新一下頁面才能執(zhí)行]
 


遞歸函數(shù)的調(diào)用就說這么多了

js遞歸函數(shù)調(diào)用自身時的保險方式。
來自js高級程序設(shè)計
一個典型階乘遞歸函數(shù):
復(fù)制代碼 代碼如下:

function fact(num){
if (num<=1){
return 1;
}else{
return num*fact(num-1);
}
}

以下代碼可導(dǎo)致出錯:
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //出錯

由于fact已經(jīng)不是函數(shù)了,所以出錯。
用arguments.callee可解決問題,這是一個指向正在執(zhí)行的函數(shù)的指針。
新的函數(shù)為:
復(fù)制代碼 代碼如下:

function fact(num){
if (num<=1){
return 1;
}else{
return num*arguments.callee(num-1); //此處更改了。
}
}
var anotherFact = fact;
fact = null;
alert(antherFact(4)); //結(jié)果為24.


JS普通遞歸的改進

遞歸函數(shù)是在一個函數(shù)通過名字調(diào)用自身的情況下構(gòu)成的,如下所示:
復(fù)制代碼 代碼如下:

function factorial(num)
{
if(num<=1)
{
return 1;
}
else
{
return num * factorial(num-1);
}
}

這是一個經(jīng)典的階乘函數(shù)。表面看來沒有什么問題,但下面的代碼卻可能導(dǎo)致它出錯。
var anotherFactorial = factorial;

anotherFactorial(4); //輸出 24
factorial = null;
anotherFactorial (4); //TypeError: Property 'factorial' of object [object Window] is not a function chrome 下測試
原因在于,我們定義的函數(shù)名,其實是指向函數(shù)的一個指針,此時定義了anotherFactorial 也指向了那個函數(shù),所以調(diào)用anotherFactorial (4)可以成功的輸出24
此時 factorial = null; 那么執(zhí)行定義函數(shù)的引用就剩下了anotherFactorial,那么在調(diào)用anotherFactorial(4)就會顯示以上的錯誤的信息。
此時可以使用arguments.callee來替代函數(shù)定義中的 factorial,
函數(shù)的定義就變成了:
復(fù)制代碼 代碼如下:

function factorial(num)
{
if(num<=1)
{
return 1;
}
else
{
return num * arguments.callee(num-1);
}
}

那么在使用上面的4行測試代碼,最后一行測試代碼也可以成功的輸出24.
--------------------------------------
上述的內(nèi)容摘自<<JavaScript高級程序設(shè)計>>第2版 144頁 7.1節(jié)

相關(guān)文章

  • JavaScript常用工具函數(shù)大全

    JavaScript常用工具函數(shù)大全

    這篇文章主要介紹了JavaScript常用工具函數(shù),匯總整理了各種JavaScript常用工具函數(shù),包括獲取、判斷、轉(zhuǎn)換、設(shè)置等相關(guān)功能函數(shù)的定義與使用方法,需要的朋友可以參考下
    2020-05-05
  • Javascript實現(xiàn)登錄記住用戶名和密碼功能

    Javascript實現(xiàn)登錄記住用戶名和密碼功能

    本文主要介紹了Javascript實現(xiàn)登錄記住用戶名和密碼功能的代碼。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 一些常用彈出窗口/拖放/異步文件上傳等實用代碼

    一些常用彈出窗口/拖放/異步文件上傳等實用代碼

    今天寫一點工作中遇到的東西【彈出窗口】【拖放】【異步文件上傳】,大家共同學(xué)習(xí),共同進步
    2013-01-01
  • 基于JavaScript實現(xiàn)帶縮略圖的輪播效果

    基于JavaScript實現(xiàn)帶縮略圖的輪播效果

    這篇文章主要為大家詳細(xì)介紹了基于JavaScript實現(xiàn)帶縮略圖的輪播效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • JavaScript 函數(shù)的執(zhí)行過程

    JavaScript 函數(shù)的執(zhí)行過程

    下面小編就為大家?guī)硪黄狫avaScript 函數(shù)的執(zhí)行過程。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript中this的用法實例分析

    JavaScript中this的用法實例分析

    這篇文章主要介紹了JavaScript中this的用法,結(jié)合實例形式分析了this的功能、常見用法與相關(guān)注意事項,需要的朋友可以參考下
    2016-12-12
  • JavaScript 變量、作用域及內(nèi)存

    JavaScript 變量、作用域及內(nèi)存

    這篇文章主要介紹了JavaScript 變量、作用域及內(nèi)存,需要的朋友可以參考下
    2015-04-04
  • 微信小程序時間軸組件的示例代碼

    微信小程序時間軸組件的示例代碼

    這篇文章主要介紹了微信小程序時間軸組件,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • gojs實現(xiàn)螞蟻線動畫效果

    gojs實現(xiàn)螞蟻線動畫效果

    這篇文章介紹了gojs實現(xiàn)螞蟻線動畫效果的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • js實現(xiàn)短信發(fā)送倒計時功能(正則驗證)

    js實現(xiàn)短信發(fā)送倒計時功能(正則驗證)

    這篇文章主要為大家詳細(xì)介紹了js實現(xiàn)短信發(fā)送倒計時功能,包含正則驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論