1.arguments和callee
arguments是函数内部的一个特殊的类数组对象,arguments有个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。
举个例子:
// 这是我们熟悉的裴波那契数列
<script type="text/javascript">
function fib(num) {
if (num <= 2) {
return 1;
} else {
return fib(num - 1) + fib(num - 2);
}
}
// 1, 1, 2, 3, 5
alert(fib(5));
</script>
可以使用arguments的callee属性来避免多次使用函数名称
<script type="text/javascript">
function fib(num) {
if (num <= 2) {
return 1;
} else {
return arguments.callee(num - 1) + arguments.callee(num - 2);
}
}
// 1, 1, 2, 3, 5
alert(fib(6));
</script>
2.caller
caller属性保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,则它的值为null。
<script type="text/javascript">
function outer() {
inner();
}
function inner() {
//alert(inner.caller);
// 下面这种表示同时使用了callee和caller
alert(arguments.callee.caller);
}
outer();
</script>
运行这部分代码会弹出警告框,并且警告框中的内容是整个outer函数,因为outer函数调用了inner函数,所以outer是inner的caller