递归函数
经典的递归阶乘函数
|
|
出现的问题如下
|
|
factorial()函数保存在变量anotherFactorial中,然后将factorial设置为null;但在调用anotherFactorial()时,由于必须执行factorial(),但factorial已经不再是一个函数了。所以会导致错误。
解决方案
|
|
arguments.callee是一个指向正在执行的函数的指针,可以来实现地函数的递归调用。这样也确保了无论如何调用函数都不会出现问题,因此在编写递归函数的时候,使用arguments.callee总比使用函数更保险。
严格模式下arguments.callee会报错
所以在严格模式下可以使用命名函数来达成相同的效果,
|
|
以上代码创建了一个名为f()的命名函数表达式,将它赋值给变量factorial。即便把函数赋值给另外一个变量,函数的名字f任然有效,所以递归调用照样可以完成。这种方式在严格和非严格模式下都行得通。
—-查看JavaScript高级程序设计