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

首頁 > 開發 > JS > 正文

JavaScript中callee和caller的區別與用法實例分析

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

本文實例講述了JavaScript中callee和caller的區別與用法。分享給大家供大家參考,具體如下:

1.callee

在函數的內部,有兩個特殊的對象:arguments和this。其中arguments是一個類似數組的對象,包含著傳入函數的所有參數。

雖然arguments的主要用途是保存函數參數,但這個對象有一個屬性——callee,該屬性是一個指針,指向擁有這個arguments對象的函數

所以callee的作用就是來指向當前對象

看一個階層函數的例子就會明白他的用途了:

/* * 普通的遞歸階層函數 */function factorial(num){  if(num <= 1){    return 1;  }else{    return num *factorial(num-1);  }}

上面的代碼運行沒有問題,但這個函數的執行與函數名factorial緊緊耦合在一起了,要是改變了函數名,里面的函數名也要隨著改變,這樣很不方便,所以我們用arguments.callee來消除這種耦合。

//使用callee屬性的遞歸階層函數function factorial1(num){  if(num <= 1){    return 1;  }else{    return num * arguments.callee(num-1);  }}

根據callee的定義,callee是arguments對象的一個屬性,指向擁有arguments對象的函數,這個函數就是factorial1 (factorial1=arguments.callee),他們指向的都是上面的遞歸函數。請記住函數的名字僅僅是一個包含指針的變量而已。

2.caller

caller是函數對象的一個屬性,該屬性保存著調用當前函數的函數的引用(指向當前函數的直接父函數)

返回一個對函數的引用,該函數調用了當前函數。

function a(){//父函數  b();};function b(){  console.info(b.caller);};a(); //結果就是彈出函數a和內容

可以看到函數b的屬性caller調用當前函數b的函數引用a(就是指向當前函數b的父函數a)

3.將callee和caller結合起來使用

function b(){  alert(b.caller);};

從這個代碼可以看出b函數中調用了b函數名,這樣當函數名改變時就很不方便,我們需要替換里面的那個b

前面我們知道用什么方法可以指向當前對象,下面我們就來修改一下:

(function a(){  b();})();function b(){  alert(arguments.callee.caller);//用arguments.callee代替了b};

JavaScript,callee,caller,區別

4.實例:斐波那契數列(用遞歸思想)

如果一對兔子每月生一對兔子;一對新生兔,從第二個月起就開始生兔子;假定每對兔子都是一雌一雄,試問一對兔子,第n個月能繁殖成多少對兔子?(使用callee完成)

var result=[];function fn(n){  if(n==1){    return 1;  }else if(n==2){    return 1;  }else {    if(result[n]){      return result[n];    }else{      //arguments.callee(...)=fn(...)      result[n]=arguments.callee(n-1)+arguments.callee(n-2);      return result[n];    }  }}

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴彦淖尔市| 疏勒县| 德惠市| 嵩明县| 阿坝| 辰溪县| 疏附县| 阿尔山市| 伊吾县| 寿阳县| 庄河市| 奉新县| 宁晋县| 澄城县| 武胜县| 汨罗市| 登封市| 莒南县| 报价| 临沂市| 兴海县| 和龙市| 洛宁县| 昌都县| 大荔县| 永登县| 沙雅县| 嘉峪关市| 潜山县| 淳安县| 舞阳县| 厦门市| 九江市| 陇西县| 上虞市| 塔河县| 宜宾市| 班戈县| 松潘县| 永嘉县| 仪陇县|