先從英語的角度來看看這兩個詞。callee是“被調用者,被調用函數”的意思;caller是“訪客、調用方”的意思。
其實JavaScript裡也正如此意,通俗點講就是:callee是你在調用哪個函數;caller是哪個函數在調用你。
舉個例子大家就明白了:
1. callee
1 (function b(){ 2 alert(arguments.callee); 3 })();
arguments.callee就是問參數在調用哪個函數,該參數就在b函數中,所以alert出來的肯定就是b函數本身了。
2. caller
1 (function a(){ 2 b(); 3 })(); 4 5 function b(){ 6 alert(b.caller); 7 };
alert(b.caller)是指哪個函數在調用b函數,顯然是a函數。那麼alert出來應該是a函數本身。
那麼這個時候再來理解概念:
callee是返回正在被執行的function函數,也就是所指定的function對象的正文。
caller是返回一個對函數的引用,該函數調用了當前函數;