arguments.callee 和 function.caller

Javascript中的arguments.

arguments

1.arguments.callee

2.function.caller


arguments.callee(指向函数引用)

例如

function test() {
	
	console.log(arguments.callee);
	
	console.log(test);
}

执行test()输出的东西是一样的,都是test的函数引用。

未标题-1.jpg

那么这个arguments.callee有什么用呢?

例如:现在要用到一个20的阶乘,因为运算量较大,所以使用到立即执行函数。

var i = (function 函数名(n) {
	
if(n == 1) {
		
	return 1;
		
}
	
else{
		
	return n * 函数名(n - 1);
		
}
	
}(20));

仔细看这段代码,

立即执行函数是没有函数名(函数引用)的,

所以要实现立即执行函数的阶乘要用到arguments.callee

该属性是一个指针,指向拥有这个 arguments 对象的函数体。


function.caller(函数自有的属性)

返回调用指定函数的函数。

function test() {
	
	demo();
	
}

function demo() {
	
	console.log(demo.caller);
	
}

test();

在test里执行的demo,所以返回的是test函数。

改特性是非标准的,请尽量不要在生产环境中使用它。


在ecmascript5标准中arguments.callee和function.caller是不允许使用的。

猜你喜欢

转载自blog.csdn.net/dfggffdd/article/details/80092643