亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2019年06月28日 09:53:51   作者:Yeoman92  
這篇文章主要介紹了JavaScript中callee和caller的區(qū)別與用法,結合實例形式分析了javascript中callee和caller的功能、區(qū)別、用法及操作注意事項,需要的朋友可以參考下

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

1.callee

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

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

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

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

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

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

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

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

2.caller

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

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

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

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

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

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

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

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

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

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

如果一對兔子每月生一對兔子;一對新生兔,從第二個月起就開始生兔子;假定每對兔子都是一雌一雄,試問一對兔子,第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常用函數(shù)技巧匯總》、《javascript面向對象入門教程》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數(shù)據(jù)結構與算法技巧總結》及《JavaScript數(shù)學運算用法總結

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

相關文章

  • JavaScript中的E-mail 地址格式驗證

    JavaScript中的E-mail 地址格式驗證

    本文給大家分享JavaScript中的E-mail 地址格式驗證,項目要求輸入的數(shù)據(jù)必須包含@符號和點號。代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • 引入外部js腳本加載慢與頁面白屏問題的解決

    引入外部js腳本加載慢與頁面白屏問題的解決

    最近做的一個項目需要引入一個外部的第三方js腳本。發(fā)現(xiàn)加載比較慢,這篇文章主要介紹了引入外部js腳本加載慢與頁面白屏問題的解決,感興趣的小伙伴們可以參考一下
    2018-12-12
  • uniapp小程序點擊輸入框時阻止彈出軟鍵盤的幾種解決方案

    uniapp小程序點擊輸入框時阻止彈出軟鍵盤的幾種解決方案

    在寫項目時候需要在表單里面加一個picker選擇器,但選擇input的時候軟鍵盤與選擇器會同時彈出,下面這篇文章主要給大家介紹了關于uniapp小程序點擊輸入框時阻止彈出軟鍵盤的幾種解決方案,需要的朋友可以參考下
    2024-02-02
  • javascript 嵌套的函數(shù)(作用域鏈)

    javascript 嵌套的函數(shù)(作用域鏈)

    當你進行函數(shù)的嵌套時,要注意實際上作用域鏈是發(fā)生變化的,這點可能看起來不太直觀。你可把下面的代碼置入firebug監(jiān)視值的變化。
    2010-03-03
  • JS前端攻堅淺析instanceof實現(xiàn)原理

    JS前端攻堅淺析instanceof實現(xiàn)原理

    這篇文章主要為大家介紹了JS前端攻堅淺析instanceof實現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • JavaScript單元測試ABC

    JavaScript單元測試ABC

    在服務器端的單元測試中,都有各種各樣的測試框架,在JavaScript中現(xiàn)在也有一些很優(yōu)秀的框架,但在本文中,我們將自己動手一步步來實現(xiàn)一個簡單的單元測試框架
    2012-04-04
  • javascript引用類型指針的工作方式

    javascript引用類型指針的工作方式

    引用類型的值是應用類型的的一個實例,對象是某個特定引用類型的實例。新對象是使用new操作符后跟一個構造函數(shù)創(chuàng)建的。下面我們就從一個小例子爛研究下這個問題吧。
    2015-04-04
  • JavaScript實現(xiàn)簡單打地鼠游戲

    JavaScript實現(xiàn)簡單打地鼠游戲

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)簡單打地鼠游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • layui上傳圖片到服務器的非項目目錄下的方法

    layui上傳圖片到服務器的非項目目錄下的方法

    今天小編就為大家分享一篇layui上傳圖片到服務器的非項目目錄下的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • Javascript 網頁水印(非圖片水印)實現(xiàn)代碼

    Javascript 網頁水印(非圖片水印)實現(xiàn)代碼

    在一些B/S結構的應用系統(tǒng)中,有很多頁面是需要有水印的。常見的就是公文系統(tǒng)、合同系統(tǒng)等。
    2010-03-03

最新評論