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

JavaScript中遞歸實(shí)現(xiàn)的方法及其區(qū)別

 更新時(shí)間:2017年09月12日 14:31:59   作者:swpu_lwf  
遞歸函數(shù)是在通過名字調(diào)用自身的情況下構(gòu)成的。下面通過本文給大家分享JavaScript中遞歸實(shí)現(xiàn)的方法及其區(qū)別,感興趣的朋友一起看看吧

遞歸函數(shù):遞歸函數(shù)是在通過名字調(diào)用自身的情況下構(gòu)成的。

遞歸實(shí)現(xiàn)階乘函數(shù):

方法一:通過使用函數(shù)的名字

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

結(jié)果為:24;

但是這種方法實(shí)現(xiàn)遞歸有一個(gè)問題,觀察以下代碼:

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  var anthorFactorial=factorial;
  console.log(anthorFactorial(4));

結(jié)果為:24;

但是:

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*factorial(num-1);
    }
  }
  var anthorFactorial=factorial;
  factorial=null;
  console.log(anthorFactorial(4));

結(jié)果為:報(bào)錯(cuò)

這是因?yàn)椋?/p>

我們定義的函數(shù)名,其實(shí)是指向函數(shù)的一個(gè)指針,定義的anotherFactorial 也指向了那個(gè)函數(shù),所以調(diào)用anotherFactorial (4)可以成功的輸出24

當(dāng) factorial = null時(shí),執(zhí)行定義函數(shù)的引用就剩下了anotherFactorial,那么在調(diào)用anotherFactorial(4)就會(huì)顯示以上的錯(cuò)誤的信息。

此時(shí)可以使用arguments.callee來替代函數(shù)定義中的 factorial。

方法二:通過使用arguments.callee

function factorial(num){
    if(num<=1){
      return 1;
    }else{
      return num*arguments.callee(num-1);
    }
  }
  var anthorFactorial=factorial;
  factorial=null;
  console.log(anthorFactorial(4));

結(jié)果為:24

arguments.callee是一個(gè)指向正在執(zhí)行的函數(shù)的指針,因此可以用arguments.callee來實(shí)現(xiàn)對(duì)函數(shù)的遞歸調(diào)用。通過使用arguments.callee來代替函數(shù)名,可以保證在調(diào)用函數(shù)時(shí)無論怎樣都不會(huì)出現(xiàn)問題。因此,在編寫遞歸函數(shù)時(shí),使用argumnts.callee總比使用函數(shù)名更加保險(xiǎn)。
但是,在嚴(yán)格模式下,不能通過腳本訪問arguments.callee,訪問這個(gè)屬性會(huì)報(bào)錯(cuò),不過可以通過命名函數(shù)表達(dá)式來達(dá)到相同的效果。

方法三:通過命名函數(shù)表達(dá)式

 var factorial=function f(num){
    if(num<=1){
      return 1;
    }else{
      return num*f(num-1);
    }
  };
  f=null;
  console.log(factorial(4));

這種方式在嚴(yán)格和非嚴(yán)格模式下都有效。

總結(jié)

以上所述是小編給大家介紹的JavaScript中遞歸實(shí)現(xiàn)的方法及其區(qū)別,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • js中獲取事件對(duì)象的方法小結(jié)

    js中獲取事件對(duì)象的方法小結(jié)

    事件對(duì)象 的獲取很簡(jiǎn)單,很久前我們就知道IE中事件對(duì)象是作為全局對(duì)象( window.event )存在的,F(xiàn)irefox中則是做為句柄( handler )的第一個(gè)參數(shù)傳入內(nèi)的。所以一行代碼就可以搞定
    2011-03-03
  • BootStrap tooltip提示框使用小結(jié)

    BootStrap tooltip提示框使用小結(jié)

    這篇文章主要為大家詳細(xì)介紹了BootStrap tooltip提示框使用小結(jié) ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • 一文總結(jié)JavaScript中常見的設(shè)計(jì)模式

    一文總結(jié)JavaScript中常見的設(shè)計(jì)模式

    在程序設(shè)計(jì)中有很多實(shí)用的設(shè)計(jì)模式,而其中大部分語言的實(shí)現(xiàn)都是基于“類”。在程序設(shè)計(jì)中有很多實(shí)用的設(shè)計(jì)模式,而其中大部分語言的實(shí)現(xiàn)都是基于“類”。,本文將總結(jié)了JavaScript中常見的十五種設(shè)計(jì)模式,感興趣的朋友可以參考下
    2023-05-05
  • javascript異步編程代碼書寫規(guī)范Promise學(xué)習(xí)筆記

    javascript異步編程代碼書寫規(guī)范Promise學(xué)習(xí)筆記

    這篇文章主要介紹了javascript異步編程代碼書寫規(guī)范Promise學(xué)習(xí)筆記,需要的朋友可以參考下
    2015-02-02
  • JavaScript對(duì)象擴(kuò)展方法的用法詳解

    JavaScript對(duì)象擴(kuò)展方法的用法詳解

    JavaScript對(duì)象中的可擴(kuò)展性指的是:是否可以給對(duì)象添加新屬性。所有的內(nèi)置對(duì)象和自定義對(duì)象顯示的都是可擴(kuò)展的,對(duì)于宿主對(duì)象,則由JavaScript引擎決定
    2022-11-11
  • Code Review 方法論與實(shí)踐總結(jié)梳理

    Code Review 方法論與實(shí)踐總結(jié)梳理

    這篇文章主要為大家介紹了Code Review 方法論與實(shí)踐總結(jié)梳理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • JS?ES5創(chuàng)建常量詳解

    JS?ES5創(chuàng)建常量詳解

    這篇文章主要介紹了JS?ES5創(chuàng)建常量詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-07-07
  • javascript 緩沖運(yùn)動(dòng)框架的實(shí)現(xiàn)

    javascript 緩沖運(yùn)動(dòng)框架的實(shí)現(xiàn)

    這篇文章主要介紹了javascript 緩沖運(yùn)動(dòng)框架的實(shí)現(xiàn)的相關(guān)資料,希望通過本能幫助到大家,實(shí)現(xiàn)這樣類似的功能,需要的朋友可以參考下
    2017-09-09
  • 微信小程序 點(diǎn)擊切換樣式scroll-view實(shí)現(xiàn)代碼實(shí)例

    微信小程序 點(diǎn)擊切換樣式scroll-view實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了微信小程序 點(diǎn)擊切換樣式scroll-view實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 一些老手都不一定知道的JavaScript技巧

    一些老手都不一定知道的JavaScript技巧

    這篇文章主要介紹了一些老手都不一定知道的JavaScript技巧,需要的朋友可以參考下
    2014-05-05

最新評(píng)論