callee是函數參數arguments對象的一個屬性,它指向參數arguments對象所在的函數自身。函數
function foo (x) { console.log(arguments.callee); return x; } foo();
從控制檯中能夠看到打印的結果爲:code
ƒ foo (x) { console.log(arguments.callee); return x; }
它的做用就是在函數內部經過調用arguments.callee()來代替調用函數自身foo()。舉個栗子,寫一個階乘函數:對象
function sum(num){ if(num <= 1){ return 1; }else{ // 以往的遞歸寫法 // return num * sum(num-1); return num * arguments.callee(num-1); } } console.log(sum(3)); // 打印結果爲 6
caller是函數對象的一個屬性,該屬性保存着調用當前函數的對象,仍是舉個栗子:遞歸
function foo (x) { console.log(foo.caller); return x + 1; } function too () { foo(3) } too();
打印結果爲:io
ƒ too () { foo(3) }
由於foo函數是在too函數內部調用的,那麼調用foo函數的對象即爲too,因此caller指向的就是too這個函數對象。console