1. 程式人生 > >Js中caller和callee的區別(轉載)

Js中caller和callee的區別(轉載)

1 :caller 返回一個呼叫當前函式的引用 如果是由頂層window呼叫的話 則返回null

(舉個栗子哈 caller給你打電話的人  誰給你打電話了 誰呼叫了你 很顯然是下面a函式的執行 只有在打電話的時候你才能知道打電話的人是誰 所以對於函式來說 只有caller在函式執行的時候才存在)

      var callerTest = function() {

           console.log(callerTest.caller) ;  

     } ;

      function a() {

           callerTest() ;   

     }

     a() ;//輸出function a() {callerTest();}

     callerTest() ;//輸出null 

2 :callee 返回一個正在被執行函式的引用  (這裡常用來遞迴匿名函式本身 但是在嚴格模式下不可行)

     callee是arguments物件的一個成員 表示對函式物件本身的引用 它有個length屬性(代表形參的長度)

     var c = function(x,y) {

             console.log(arguments.length,arguments.callee.length,arguments.callee)

      } ;

     c(1,2,3) ;//輸出3 2 function(x,y) {console.log(arguments.length,arguments.callee.length,arguments.callee)}