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