caller和callee

caller

  • 检验函数被谁调用过
  • 检验函数被谁调用过 返回值是调用这个函数的函数本身,没有的话返回null

    arguments.callee

  • 函数本身
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function Fn() {
    console.log(arguments.callee.caller);//-->function fn() {Fn()}
    //-->arguments.callee 函数本身
    //caller:检验函数被谁调用过 返回值是调用这个函数的函数本身,没有的话返回null
    console.log(Fn.prototype.constructor === arguments.callee);//-->true
    }
    function fn() {
    Fn()
    }
    fn();
1
2
3
4
5
6
7
8
9
10
function sum(n) {
console.log(arguments.callee===arguments.callee.caller);
//->第一次输出false,因为第一次是函数自己执行,即自调用 自调用的时候console.log(arguments.callee.caller) 输出null 而此时arguments.callee 函数本身仍然是sun函数本身 所以输出false;
// -->当自调用执行完成后 arguments.callee===arguments.callee.caller===sum这个函数本身 ---> 返回true
if(n<=0){
return 0
}
return n+sum(--n);
}
console.log(sum(10));//55
您的支持将鼓励我继续创作!