日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

JavaScript中的callee与caller的区别

發布時間:2023/12/19 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 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的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。