【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

相關文章
相關標籤/搜索