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

Javascript 實(shí)現(xiàn)匿名遞歸的實(shí)例代碼

 更新時(shí)間:2017年05月25日 09:55:55   作者:肖國(guó)棟  
本篇文章主要介紹了Javascript 實(shí)現(xiàn)匿名遞歸的實(shí)例代碼,利用 arguments.callee 來(lái)實(shí)現(xiàn)匿名遞歸的方式。有興趣的可以了解一下

遞歸是一種常見(jiàn)的編程技巧,實(shí)名遞歸相信大家都不陌生,但如果想要實(shí)現(xiàn)匿名遞歸呢?比如想要返回一個(gè)匿名遞歸函數(shù),又或者是定義一個(gè)匿名遞歸函數(shù)并直接調(diào)用它,該怎樣去做呢?本文將來(lái)探討一下它的實(shí)現(xiàn)。

實(shí)名遞歸

我們還是先從實(shí)名遞歸說(shuō)起吧,還是用那個(gè)最簡(jiǎn)單的求階乘的例子:

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * fact(n - 1);
 }
}
console.log(fact(5));

遞歸要求自己調(diào)用自己,如果函數(shù)有名字,這就太簡(jiǎn)單不過(guò)了。

利用變量實(shí)現(xiàn)遞歸

函數(shù)還可以賦給一個(gè)變量,不過(guò)要實(shí)現(xiàn)遞歸,函數(shù)體里面還是要依賴(lài)這個(gè)變量名:

var f = function(n) {
 if (n < 2) {
  return n;
 } else {
  return n * f(n - 1);
 }
}
console.log(f(5));

應(yīng)該說(shuō)這種方式跟之前的其實(shí)沒(méi)有本質(zhì)的不同。

匿名遞歸

現(xiàn)在我們來(lái)探討匿名遞歸的實(shí)現(xiàn)。

初步設(shè)想

如果想要返回一個(gè)匿名遞歸函數(shù),又或者是定義一個(gè)匿名遞歸函數(shù)并直接調(diào)用它:

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * ?(n - 1);
 }
})(5);

如果沒(méi)有一個(gè)名字,代碼中那個(gè)問(wèn)號(hào)我們就不知道要填寫(xiě)什么,就沒(méi)法形成遞歸了,此時(shí)我們要怎么辦呢?這時(shí)就要請(qǐng)出 arguments 對(duì)象了。

arguments 對(duì)象

在 javascript 的函數(shù)中,arguments 對(duì)象代表了實(shí)際調(diào)用時(shí)的參數(shù)對(duì)象。在我們的遞歸函數(shù)中,實(shí)際上我們也可以完全不用去定義“形式參數(shù)” n:

function factNoParam() {
 if (arguments[0] < 2) {
  return arguments[0];
 } else {
  return arguments[0] * factNoParam(arguments[0] - 1);
 }
}
console.log(factNoParam(5));

只要我們?cè)谡{(diào)用時(shí)傳入了實(shí)際的參數(shù),就可以用 arguments[0] 取得實(shí)際傳入的這個(gè)參數(shù)的值。

如果有更多的參數(shù),還可以 arguments[1],arguments[2] 等來(lái)取得。

arguments.callee 屬性

arguments 可以用來(lái)獲取參數(shù),相信你可能已經(jīng)知道了,但 arguments 對(duì)象其實(shí)還有一個(gè)屬性,即所謂的 callee。arguments.callee 代表了這個(gè)函數(shù)本身。這是什么意思呢?其實(shí)我們完全可以把 fact 寫(xiě)成這樣:

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
}
console.log(fact(5));

那么它依然是遞歸的。因?yàn)?arguments.callee 實(shí)際就等于 fact。

那么,到了這里,有了這個(gè)屬性的幫助,要實(shí)現(xiàn)匿名遞歸就不難了,只要把 ? 改為 arguments.callee 即可:

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
})(5);

如果有需要,也可以把它作為匿名遞歸返回。

關(guān)于 javascript 實(shí)現(xiàn)匿名遞歸的介紹就到這里。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

蚌埠市| 越西县| 汶上县| 陕西省| 泰安市| 方山县| 都匀市| 班玛县| 宁强县| 玉龙| 黔西| 云霄县| 海门市| 台北县| 武汉市| 保山市| 望谟县| 开远市| 沙洋县| 舒兰市| 宁海县| 木兰县| 贵州省| 仙居县| 三明市| 称多县| 巫溪县| 洛阳市| 突泉县| 宜川县| 长武县| 桐乡市| 大厂| 枣强县| 轮台县| 黄陵县| 勃利县| 宝鸡市| 盐亭县| 丁青县| 鞍山市|