最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

方法一:通過(guò)使用函數(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è)問(wèn)題,觀察以下代碼:

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來(lái)替代函數(shù)定義中的 factorial。

方法二:通過(guò)使用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來(lái)實(shí)現(xiàn)對(duì)函數(shù)的遞歸調(diào)用。通過(guò)使用arguments.callee來(lái)代替函數(shù)名,可以保證在調(diào)用函數(shù)時(shí)無(wú)論怎樣都不會(huì)出現(xiàn)問(wèn)題。因此,在編寫遞歸函數(shù)時(shí),使用argumnts.callee總比使用函數(shù)名更加保險(xiǎn)。
但是,在嚴(yán)格模式下,不能通過(guò)腳本訪問(wèn)arguments.callee,訪問(wèn)這個(gè)屬性會(huì)報(bào)錯(cuò),不過(guò)可以通過(guò)命名函數(shù)表達(dá)式來(lái)達(dá)到相同的效果。

方法三:通過(guò)命名函數(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ì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論

白城市| 修水县| 武威市| 海晏县| 浪卡子县| 泸州市| 晋城| 专栏| 新晃| 克什克腾旗| 嫩江县| 大名县| 霸州市| 女性| 佳木斯市| 会昌县| 杂多县| 千阳县| 石渠县| 孝义市| 洮南市| 孙吴县| 乐亭县| 沁阳市| 吴堡县| 武胜县| 车险| 玉溪市| 广丰县| 班戈县| 阳曲县| 新安县| 灌南县| 明星| 丹凤县| 剑阁县| 公安县| 广丰县| 龙江县| 清水河县| 正阳县|