javascript中callee與caller的區別分析

來源:互聯網
上載者:User

javascript中callee與caller的區別分析

   javascript中callee與caller的區別分析

  有些小夥伴可能會問caller,callee 是什麼?在javascript 中有什麼樣的作用?那麼本篇會對於此做一些基本介紹。希望能夠對大家理解javascript中的callee與caller有所協助。

  callee

  callee是對象的一個屬性,該屬性是一個指標,指向參數arguments對象的函數

  首先我們來寫個階成函數:

  ?

1

2

3

4

5

6

7

function chen(x){

if (x<=1) {

return 1;

} else{

return x*chen(x-1);

};

};

  從這個函數中可以看出來,用到了遞迴函式,要是改變了函數名,裡面的函數名也要隨著改變,這樣很不方便所以我們用callee來試試

  ?

1

2

3

4

5

6

function chen(x){

if (x<=1) {return 1;

}else{

return x*arguments.callee(x-1);

};

};

  我們來分析一下為什麼這樣寫:根據callee的定義,可以看出來callee是arguments對象的一個屬性,指向arguments對象的函數,這個函數就是chen(chen=arguments.callee),這樣解釋應該可以理解了吧。

  caller

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

  先來個例子吧

  ?

1

2

3

4

5

6

7

function a(){

b();

};

function b(){

alert(b.caller);

};

a(); //結果就是彈出函數a和內容

  我們來解釋一下吧,首先函數b的屬性caller調用當前函數b的函數引用a(就是指向當前函數b的父函數a),所以結果就是彈出 function a(){ b();};

  那麼瞭解了caller和callee,那麼可以不可以將二者結合在一起來使用呢

  ?

1

2

3

function b(){

alert(b.caller);

};

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

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

  ?

1

2

3

4

5

6

7

(function a(){

b();

})();

 

function b(){

alert(arguments.callee.caller);

};

  從代碼中可以看出我們用arguments.callee代替了b函數,所以解決了一下麻煩。。。。。

  以上所述就是本文的全部內容了,希望大家能夠喜歡。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.