function factorial(n, total=1) {
if (factorial.caller !== factorial && arguments.length >1)
throw new Error('only one param');
if (n < 3) return n*total;
return factorial(n - 1, n * total);
}最近学习ES6,看到函数尾调这个新特性,对函数递归调用真是太有用了!我们知道递归调用算法可以写得很简单,但效率不高,但如果用上了尾调就高效了!上面是阶乘的递归尾调。如果JS支持断言就更简单了:
function factorial(n, total=1) {
if (factorial.caller !== factorial)
assert(arguments.length === 1, 'only one param');
if (n < 3) return n*total;
return factorial(n - 1, n * total);
}
注意:factorial.caller不能用arguments.caller
本文探讨了ES6中尾调用优化这一新特性,并通过一个阶乘函数的例子展示了如何利用尾递归来提高递归调用的效率。此外,文章还讨论了在JavaScript中实现断言的可能性。
924

被折叠的 条评论
为什么被折叠?



