<script>
// arguments: 是一个类数组对象,包含传入函数的所有参数
// callee属性: 是一个指针,指向拥有这个arguments对象的函数
// caller属性: 这个属性保存着调用当前函数的函数的引用
// 普通递归
function factorial(val) {
if (val === 0 || val === 1) {
return 1;
} else {
return val * factorial(val - 1);
}
}
console.log(factorial(5)); // 120
// callee示例如下
function factorial(val) {
if (val === 0 || val === 1) {
return 1;
} else {
return val * arguments.callee(val - 1);
}
}
var trueFactorial = factorial;
factorial = function() {
return 0;
}
// 解除了函数代码与函数名的耦合后,将无法使用函数名调用原函数
console.log(factorial(5)); // 0
console.log(trueFactorial(5)); // 120
// caller示例如下
function outer() {
inner();
}
function inner() {
console.log(inner.caller);
}
outer();
</script>