老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網站建設、域名注冊、服務器等服務

JavaScript中callee和caller的區(qū)別與用法實例分析

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

為新和等地區(qū)用戶提供了全套網頁設計制作服務,及新和網站建設行業(yè)解決方案。主營業(yè)務為成都網站設計、成都做網站、新和網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

1.callee

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

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

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

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

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

上面的代碼運行沒有問題,但這個函數的執(zhí)行與函數名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的區(qū)別與用法實例分析

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];
    }
  }
}

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容可查看本站專題:《JavaScript常用函數技巧匯總》、《javascript面向對象入門教程》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》及《JavaScript數學運算用法總結》

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


本文標題:JavaScript中callee和caller的區(qū)別與用法實例分析
瀏覽路徑:http://www.xueling.net.cn/article/jehoco.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国内精品久久久久久 | 99热.com| 国产高清视频在线观看播放 | 狠狠躁夜夜躁人人爽天天天天97 | 亚洲精品无码AV中文字幕 | 中文字幕在线观看1 | 伊人75在线| 在线不卡日本V二区到六区 欧洲尺码日本尺码专线图片 | 免费人成网WW555KKK在线 | 亚洲路线1路线2路线3地址 | 色爱无码AV综合区老司机非洲 | 亚洲国产精品ⅴa在线观看 免费日韩网站 | 日韩av在线第一页 | 久久99热国产| 久久毛片一区二区三区 | 永久免费无码网站在线观看 | 成人国产精品入口免费视频 | 日本色婷婷 | 18禁止进入黄大全在线 | 欧洲大片精品免费永久看nba | 国产自一区 | 一级黄色靠逼 | 欧美亚洲一区二区在线观看 | 国产一区二区三区美女被黑人伦 | gogo全球大胆高清人露出91 | 2024你懂的网站无码内射 | 亚洲国产的精品太乱码一区二区 | 九色蝌蚪少妇 | 欧美aaa级| 大胆裸体gogo毛片免费看 | 欧美又大又粗无码视频 | 欧美激情精品久久久久久黑人 | 亚洲啊啊啊啊啊 | 欧美精品一区二区久久 | 四虎成人精品在永久免费 | 啦啦啦中文在线观看日本 | 国产精品69久久久 | 国产精品永久久久久 | 国产精品中文字幕在线观看 | 欧美日韩亚洲精品内裤 | 亚洲AV高清一区二区三区尤物 |