【JavaScript】callee 与 caller

callee

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

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

相关文章
相关标签/搜索