亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

JavaScript arguments.callee作用及替換方案詳解

瀏覽:104日期:2023-10-16 10:06:17

一、arguments.callee的作用:返回正被執行的 Function 對象

arguments 的主要用途是保存函數參數, 但這個對象還有一個名叫 callee 的屬性,返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文,這有利于匿名函數的遞歸或者保證函數的封裝性。

請看下面這個非常經典的階乘函數

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

定義階乘函數一般都要用到遞歸算法;如上面的代碼所示,在函數有名字,而且名字以后也不會變的情況下,這樣定義沒有問題。但問題是這個函數的執行與函數名 factorial 緊緊耦合在了一起。為了消除這種緊密耦合的現象,可以像下面這樣使用

arguments.callee

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

在這個重寫后的 factorial()函數的函數體內,沒有再引用函數名 factorial。這樣,無論引用函數時使用的是什么名字,都可以保證正常完成遞歸調用。例如

function factorial(num){ if(num <= 1){return 1; }else{return num * arguments.callee(num-1); } } var trueFactorial = factorial; alert(trueFactorial(5)); //120 factorial = function() { return 0; } alert(trueFactorial(5));// 120 如果沒有使用arguments.callee,將返回0

在此,變量 trueFactorial 獲得了 factorial 的值,實際上是在另一個位置上保存了一個函數的指針。然后,我們又將一個簡單地返回 0的函數賦值給 factorial 變量。如果像原來的 factorial() 那樣不使用 arguments.callee,調用 trueFactorial()就會返回 0。可是,在解除了函數體內的代碼與函數名的耦合狀態之后,trueFactorial()仍然能夠正常地計算階乘;至于factorial(),它現在只是一個返回 0的函數。

二、arguments.callee的替換方案

現在已經不推薦使用arguments.callee();

原因:訪問 arguments 是個很昂貴的操作,因為它是個很大的對象,每次遞歸調用時都需要重新創建。影響現代瀏覽器的性能,還會影響閉包。

不能用怎么辦?

遞歸時用到arguments.callee()是常見的事情,比如一道面試題。接受參數n=5,不用for循環輸出數組【1,2,3,4,5】,這是用遞歸的思路,配合arguments.callee,代碼如下:

function show(n) { var arr = []; return (function () { arr.unshift(n); n--; if (n != 0) { arguments.callee(); } return arr; })()}show(5)//[1,2,3,4,5]

現在arguments.callee 被棄用了。怎么辦,其實很簡單,給內部函數一個名字即可(當函數被調用時,它的arguments.callee對象就會指向自身,也就是一個對自己的引用。)

function show(n) { var arr = []; return (function fn() { arr.unshift(n); n--; if (n != 0) { fn(); } return arr; })()}show(5)//[1,2,3,4,5]

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 236理论片在线播放 24小时中文乱码字幕在线观看 | 日韩欧美一区二区三区不卡在线 | 男女日批视频在线永久观看 | 久草在线视频播放 | 欧美一区二区三区gg高清影视 | 亚洲综合视频 | 欧美日韩乱码毛片免费观看 | 网站免费黄 | 免费久| 岛国a级片 | 一级a做爰片欧欧美毛片4 | 国产精品国产三级国产普通话对白 | 涩涩国产精品福利在线观看 | 爱呦视频在线播放网址 | 色婷婷久久免费网站 | 亚洲国产精品免费 | 亚洲精品aⅴ一区二区三区 亚洲精品aⅴ中文字幕乱码 | 中文日韩字幕一区在线观看 | 污污短视频 | 亚洲综合另类 | 国产亚洲美女精品久久久久狼 | 1024手机在线观看旧版国产 | 亚洲在线久久 | freesexvideo性欧美tv2021 | 在线欧美色 | 91视频这里只有精品 | 亚洲综合一区二区精品久久 | 亚洲国产综合精品 | 久99久视频 | 日韩欧美精品一区二区三区 | 久热99这里只有精品视频6 | 久久精品成人免费看 | 最新国产精品精品视频 | 福利视频第一区 | 欧美国产人妖另类色视频 | 成人在线网 | 日韩在线视频一区二区三区 | 亚洲网站免费观看 | 美国一级大黄一片免费zzz | 国产制服丝袜在线 | 欧美一级高清片欧美国产欧美 |