javascript中callee與caller的用法和應用情境

來源:互聯網
上載者:User

caller :
functionName.caller 返回調用者。

看看下面的函數,大家可以複製到VS中執行下 複製代碼 代碼如下:function caller() {
if (caller.caller) {
alert(caller.caller.toString());
} else {
alert("函數直接執行");
}
}
function handleCaller() {
caller();
}
handleCaller();
caller();

大家會發現第一個alert會彈出調用caller函數的調用者handleCaller,而第二個alert由於沒有在其他函數體內調用,所以caller為null,就執行了 alert("函數直接執行");

callee:

返回正被執行的 Function 對象,也就是所指定的 Function 對象的本文.
callee是arguments 的一個屬性成員,它表示對函數對象本身的引用,這有利於匿名

函數的遞迴或者保證函數的封裝性。 下面一段代碼先說明callee的用法,執行個體代碼摘自網上 複製代碼 代碼如下:function calleeLengthDemo(arg1, arg2) {
alert(arguments.callee.toString());
if (arguments.length == arguments.callee.length) {
window.alert("驗證形參和實參長度正確!");
return;
} else {
alert("實參長度:" + arguments.length);
alert("形參長度: " + arguments.callee.length);
}
}
calleeLengthDemo(1);

第一個訊息框彈出calleeLengthDemo函數本身,這說明callee就是函數本身對象的引用。callee還有個非常有用的應用就是用來判斷實際參數跟行參是否一致。上面的代碼第一個訊息框會彈出實際參數的長度為1,形式參數也就是函數本身的參數長度為2.

應用情境:
callee的應用情境一般用於匿名函數
大家看下下面一段代碼 摘自網路 複製代碼 代碼如下:var fn=function(n){
if(n>0) return n+fn(n-1);
return 0;
}
alert(fn(10))

函數內部包含了對自身的引用,函數名僅僅是一個變數名,在函數內部調用即相當於調用
一個全域變數,不能很好的體現出是調用自身,這時使用callee會是一個比較好的方法 複製代碼 代碼如下:var fn=(function(n){
if(n>0) return n+arguments.callee(n-1);
return 0;
})(10);
alert(fn)

這樣就讓代碼更加簡練。又防止了全域變數的汙染。

caller的應用情境 主要用於察看函數本身被哪個函數調用。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.