国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

Javascript 實現匿名遞歸的實例代碼

2024-05-06 16:37:27
字體:
來源:轉載
供稿:網友

遞歸是一種常見的編程技巧,實名遞歸相信大家都不陌生,但如果想要實現匿名遞歸呢?比如想要返回一個匿名遞歸函數,又或者是定義一個匿名遞歸函數并直接調用它,該怎樣去做呢?本文將來探討一下它的實現。

實名遞歸

我們還是先從實名遞歸說起吧,還是用那個最簡單的求階乘的例子:

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

遞歸要求自己調用自己,如果函數有名字,這就太簡單不過了。

利用變量實現遞歸

函數還可以賦給一個變量,不過要實現遞歸,函數體里面還是要依賴這個變量名:

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

應該說這種方式跟之前的其實沒有本質的不同。

匿名遞歸

現在我們來探討匿名遞歸的實現。

初步設想

如果想要返回一個匿名遞歸函數,又或者是定義一個匿名遞歸函數并直接調用它:

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

如果沒有一個名字,代碼中那個問號我們就不知道要填寫什么,就沒法形成遞歸了,此時我們要怎么辦呢?這時就要請出 arguments 對象了。

arguments 對象

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

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

只要我們在調用時傳入了實際的參數,就可以用 arguments[0] 取得實際傳入的這個參數的值。

如果有更多的參數,還可以 arguments[1],arguments[2] 等來取得。

arguments.callee 屬性

arguments 可以用來獲取參數,相信你可能已經知道了,但 arguments 對象其實還有一個屬性,即所謂的 callee。arguments.callee 代表了這個函數本身。這是什么意思呢?其實我們完全可以把 fact 寫成這樣:

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

那么它依然是遞歸的。因為 arguments.callee 實際就等于 fact。

那么,到了這里,有了這個屬性的幫助,要實現匿名遞歸就不難了,只要把 ? 改為 arguments.callee 即可:

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

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

關于 javascript 實現匿名遞歸的介紹就到這里。希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 奉贤区| 德阳市| 含山县| 施甸县| 广宗县| 科技| 闽侯县| 丹凤县| 福贡县| 石阡县| 深水埗区| 久治县| 石渠县| 阿坝县| 洛南县| 若尔盖县| 许昌市| 铁岭市| 离岛区| 韶关市| 旺苍县| 沙河市| 潼南县| 祁连县| 饶河县| 仪陇县| 靖西县| 红原县| 江安县| 古蔺县| 威海市| 平湖市| 宝坻区| 巩留县| 凯里市| 喀什市| 克什克腾旗| 襄汾县| 邢台县| 沿河| 井研县|