JavaScript中的callee与caller的区别
1.callee
callee是對象的一個屬性,該屬性是一個指針,指向參數arguments對象的函數
作用:就是用來指向當前對象
返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文.
callee是arguments 的一個屬性成員,它表示對函數對象本身的引用,這有利于匿名
函數的遞歸或者保證函數的封裝性。 下面一段代碼先說明callee的用法,實例代碼摘自網上 :
1 function calleeLengthDemo(arg1, arg2) {
2 alert(arguments.callee.toString());
3 if (arguments.length == arguments.callee.length) {
4 window.alert("驗證形參和實參長度正確!");
5 return;
6 } else {
7 alert("實參長度:" + arguments.length);
8 alert("形參長度: " + arguments.callee.length);
9 }
10 }
11 calleeLengthDemo(1);
第一個消息框彈出calleeLengthDemo函數本身,這說明callee就是函數本身對象的引用。
callee還有個非常有用的應用就是用來判斷實際參數跟行參是否一致。上面的代碼第一個消息框會彈出實際參數的長度為1,形式參數也就是函數本身的參數長度為2.
2.caller
caller是函數對象的一個屬性,該屬性保存著調用當前函數的函數的引用(指向當前函數的直接父函數)
返回一個對函數的引用,該函數調用了當前函數。
functionName.caller
functionName 對象是所執行函數的名稱。
注意:
對于函數來說,caller 屬性只有在函數執行時才有定義。 如果函數是由 Javascript 程序的頂層調用的,那么 caller 包含的就是 null 。
看看下面的函數,
1 function caller() {
2 if (caller.caller) {
3 alert(caller.caller.toString());
4 } else {
5 alert("函數直接執行");
6 }
7 }
8 function handleCaller() {
9 caller();
10 }
11 handleCaller();
12 caller();
大家會發現第一個alert會彈出調用caller函數的調用者handleCaller,而第二個alert由于沒有在其他函數體內調用,所以caller為null,就執行了 alert("函數直接執行");
應用場景:
callee的應用場景一般用于匿名函數
大家看下下面一段代碼 摘自網絡
1 var fn=function(n){
2 if(n>0) return n+fn(n-1);
3 return 0;
4 }
5 alert(fn(10))
函數內部包含了對自身的引用,函數名僅僅是一個變量名,在函數內部調用即相當于調用
一個全局變量,不能很好的體現出是調用自身,這時使用callee會是一個比較好的方法
1 var fn=(function(n){
2 if(n>0) return n+arguments.callee(n-1);
3 return 0;
4 })(10);
5 alert(fn)
這樣就讓代碼更加簡練。又防止了全局變量的污染。
caller的應用場景 主要用于察看函數本身被哪個函數調用。
總結
以上是生活随笔為你收集整理的JavaScript中的callee与caller的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: npm run 脚本背后的事情
- 下一篇: CAD中3D建模旋转rev命令怎么使用