1. 程式人生 > >【JavaScript】callee 與 caller

【JavaScript】callee 與 caller

callee

callee是函式引數arguments物件的一個屬性,它指向引數arguments物件所在的函式自身。

function foo (x) {
	console.log(arguments.callee);
	return x;
}

foo();

從控制檯中可以看到列印的結果為:

ƒ 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();

列印結果為:

ƒ too () {
	foo(3)
}

因為foo函式是在too函式內部呼叫的,那麼呼叫foo函式的物件即為too,所以caller指向的就是too