function factorial(num)
{
if(num<=1)
{
return 1;
}else
{
return num*factorial(num-1);
}
}
定义阶乘函数一般要用到递归算法,如上面代码所示,但存在一个问题,就是函数的执行与factorial函数名紧紧耦合在一起,为了解决这种紧密耦合的现象,下面的代码可以解决这种问题
function factorial(num)
{
if(num<=1)
{
return 1;
}
else
{
return num*arguments.callee(num-1)
}
}
这个重写之后的函数的函数体内没有再引用factorial这个函数名, 无论引用函数时使用什么名字,都可以保证正常完成递归调用。
其实在函数内部,有两个特殊的对象arguments和this。
arguments的主要途径是保存函数参数,这个对象还有一个名叫callee的属性,该属性是一个指针,指向拥有这个arguments对象的函数。