首頁  >  文章  >  web前端  >  javascript中callee與caller的區別分析_javascript技巧

javascript中callee與caller的區別分析_javascript技巧

WBOY
WBOY原創
2016-05-16 16:03:131117瀏覽

callee

callee是物件的屬性,該屬性是指針,指向參數arguments物件的函數
首先我們來寫個階成函數:

function chen(x){
if (x<=1) {
return 1;
} else{
return x*chen(x-1);
};
};

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

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是函數物件的屬性,該屬性保存著呼叫當前函數的函數的參考(指向當前函數的直接父函數)

先來個例子

function a(){
b();
};
function b(){
alert(b.caller);
};
a(); //结果就是弹出函数a和内容

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

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

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

從這個程式碼可以看出b函數中呼叫了b函數名,這樣當函數名稱改變時就很不方便,我們需要替換裡面的那個b
前面我們知道用什麼方法可以指向當前物件,下面我們就來修改一下:

(function a(){
b();
})();

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

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn