当以递归形式编写一个简单的阶乘函数时,我们通常只用它自己的名字来调用它自己的函数。如果函数随后被分配给某个其他名称并且在原始引用不再有效时通过该引用调用,则会导致问题,如下面的代码所示。
var factorial = function (number) {
if (number < 1) {
return 1;
} else {
return number * factorial(number - 1);
}
};
var fact = factorial;
factorial = 5;
console.log(fact(10));
现在,明显的解决方法是通过arguments.callee
调用函数,但在严格模式下无效。另外,arguments.callee不适用于ES6中的箭头功能。
所以我的问题基本上就是这个。编写与名称分离的递归函数的最佳实践是什么?另外,如何递归地在ES6中编写箭头函数?